我有一个 XML 编写脚本,可以为特定的第 3 方工具输出 XML。
我使用原始 XML 作为模板来确保构建所有正确的元素,但最终的 XML 看起来与原始的不同。
我以相同的顺序编写属性,但 lxml 按自己的顺序编写它们。
我不确定,但我怀疑第三部分工具期望属性以特定顺序出现,我想解决这个问题,这样我就可以看看是否是属性顺序导致它失败,或者是其他原因。
源元素:
<FileFormat ID="1" Name="Development Signature" PUID="dev/1" Version="1.0" MIMEType="text/x-test-signature">
我的源脚本:
sig.fileformat = etree.SubElement(sig.fileformats, "FileFormat", ID = str(db.ID), Name = db.name, PUID="fileSig/{}".format(str(db.ID)), Version = "", MIMEType = "")
我的结果 XML:
<FileFormat MIMEType="" PUID="fileSig/19" Version="" Name="Printer Info File" ID="19">
有没有办法限制它们的写入顺序?
看起来 lxml 按照您设置属性的顺序序列化属性:
>>> from lxml import etree as ET
>>> x = ET.Element("x")
>>> x.set('a', '1')
>>> x.set('b', '2')
>>> ET.tostring(x)
'<x a="1" b="2"/>'
>>> y= ET.Element("y")
>>> y.set('b', '2')
>>> y.set('a', '1')
>>> ET.tostring(y)
'<y b="2" a="1"/>'
请注意,当您使用 ET.SubElement() 构造函数传递属性时,Python 会构造一个关键字参数字典并将该字典传递给 lxml。这会丢失源文件中的任何顺序,因为 Python 的字典是无序的(或者更确切地说,它们的顺序是由字符串哈希值确定的,该值可能因平台而异,或者实际上因执行而异)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)