python-lxml:强制属性的特定顺序

我有一个XML编写脚本,可以为特定的第三方工具输出XML

我使用了原始XML作为模板,以确保生成了所有正确的元素,但最终的XML与原始XML不一样

我以相同的顺序写入属性,但lxml以自己的顺序写入属性

我不确定,但我怀疑第三部分工具希望属性以特定的顺序出现,我想解决这个问题,这样我可以看看是attrib顺序导致它失败,还是其他原因

源元素:

<FileFormat ID=“1”Name=“开发签名”PUID=“dev/1”Version=“1.0”MIMEType=“text/x-test-Signature”>

我的源脚本:

sig.fileformat=etree.SubElement(sig.fileformat,“fileformat”,ID=str(db.ID),Name=db.Name,PUID=“fileSig/{}”。format(str(db.ID)),Version=“”,MIMEType=“”)

我的结果XML:

<FileFormat MIMEType=“”PUID=“fileSig/19”Version=“”Name=“打印机信息文件”ID=“19”>

有没有办法限制它们的书写顺序

lxml似乎按照设置属性的顺序序列化属性:

&gt&燃气轮机&燃气轮机;从lxml导入etree作为ET
&燃气轮机&燃气轮机&燃气轮机;x=等元素(“x”)
&燃气轮机&燃气轮机&燃气轮机;x、 集合('a','1')
&燃气轮机&燃气轮机&燃气轮机;x、 集合('b','2')
&燃气轮机&燃气轮机&燃气轮机;ET.tostring(x)
“<x a=“1”b=“2”/>'
&燃气轮机&燃气轮机&燃气轮机;y=等元素(“y”)
&燃气轮机&燃气轮机&燃气轮机;y、 集合('b','2')
&燃气轮机&燃气轮机&燃气轮机;y、 集合('a','1')
&燃气轮机&燃气轮机&燃气轮机;ET.tostring(y)
“<y b=“2”a=“1”/>”

请注意,当您使用ET.SubElement()构造函数传递属性时,Python会构造一个关键字参数字典,并将该字典传递给lxml。这会丢失源文件中的任何顺序,因为Python的字典是无序的(或者说,它们的顺序是由字符串散列值决定的,这些值可能因平台而异,或者实际上因执行而异)

发表评论