如何以xml节点的有序方式序列化python ElementTree?

2024-04-23 10:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在内存中有一个pythonxmlementtree,它看起来像

<A>
  <B>..</B>
  <C>..</C>
  <D>..</D>
</A>

我将ElementTree序列化为xml

^{pr2}$

每次调用上面的tostring()方法时,内部节点B、C、D的顺序都会发生变化。如何确保我的序列化将遵循确定的顺序?在


Tags: 方法内存节点序列化顺序xmlelementtreetostring
1条回答
网友
1楼 · 发布于 2024-04-23 10:08:35

我知道很多答案都表明了这一点,但是

minidom.parseString(ET.tostring(root)).toprettyxml("  ")

实际上是一种非常糟糕的XML文件打印方式。在

它包括解析,用ET序列化,然后再解析,再用一个完全不同的XML库序列化。这是愚蠢和浪费,我不会惊讶,如果迷你们搞砸了。在

如果已安装,请切换到lxml and use its built-in pretty-printing function。在

如果你因为某种原因xml.etree.ElementTree,您可以使用一个简单的递归函数在适当的位置美化树:

^{pr2}$

用法很简单:

import xml.etree.ElementTree as ET
from xmlhelpers import indent    

root = ET.fromstring("<A><B>..</B><C>..</C><D>..</D></A>")
indent(root)

print( ET.tostring(root) )

这将打印一个缩进的版本:

b'<A>\n  <B>..</B>\n  <C>..</C>\n  <D>..</D>\n</A>\n'

也就是说,从不使用“tostring”将XML树写入文件。在

总是用XML库提供的函数编写XML文件。在

tree = ET.ElementTree(root) # only necessary if you don't already have a tree
tree.write(filename, encoding="UTF-8")

相关问题 更多 >