【发布时间】:2020-06-03 00:03:56
【问题描述】:
我正在尝试使用 lxml 创建一个 xml 文件,我很清楚 xml 中的属性顺序无关紧要,但我仍在寻找一种方法来防止属性按特定顺序排列。
我也尝试过 minidom,但也没有锻炼。
在 lxml 我有以下代码:
from lxml import etree as ET
from collections import OrderedDict
root = ET.Element("Root", OrderedDict([("id","0"),("start","0"),("end","200")]))
ET.tostring(root)
由于我在这里使用了 OrderedDict,因此这部分按我想要的顺序提供了以下属性输出:
<Root id="0" start="0" end="200"/>
然后我用同样的方法创建了一个 Child:
child1 = ET.Element("sentence", OrderedDict([("id","0"),("start","0"),("end","255")]))
root.append(child1)
xml_str = ET.tostring(root, pretty_print=True)
print(xml_str)
打印 xml_str 会得到我期望的输出:
<Root id="0" start="0" end="200">\n <sentence id="0" start="0" end="255"/>\n</Root>
但是当涉及到将其写入 xml 文件时:
with open('op.xml', 'wb') as f:
f.write(xml_str)
写入 op.xml 文件时输出不一样:
<?xml version="1.0"?>
<Root end="200" start="0" id="0">
<sentence end="255" start="0" id="0"/>
</Root>
清楚地看到属性顺序已经改变,有什么方法可以得到我期望的输出,即保持属性顺序。
我也尝试过使用 minidom,但即使在参考以下内容后它也不起作用: Preserve order of attributes when modifying with minidom
【问题讨论】:
标签: python xml lxml elementtree minidom