2024-04-23 10:08:35 发布
网友
我在内存中有一个pythonxmlementtree,它看起来像
<A> <B>..</B> <C>..</C> <D>..</D> </A>
我将ElementTree序列化为xml
每次调用上面的tostring()方法时,内部节点B、C、D的顺序都会发生变化。如何确保我的序列化将遵循确定的顺序?在
我知道很多答案都表明了这一点,但是
minidom.parseString(ET.tostring(root)).toprettyxml(" ")
实际上是一种非常糟糕的XML文件打印方式。在
它包括解析,用ET序列化,然后再解析,再用一个完全不同的XML库序列化。这是愚蠢和浪费,我不会惊讶,如果迷你们搞砸了。在
如果已安装,请切换到lxml and use its built-in pretty-printing function。在
如果你因为某种原因xml.etree.ElementTree,您可以使用一个简单的递归函数在适当的位置美化树:
用法很简单:
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")
我知道很多答案都表明了这一点,但是
实际上是一种非常糟糕的XML文件打印方式。在
它包括解析,用ET序列化,然后再解析,再用一个完全不同的XML库序列化。这是愚蠢和浪费,我不会惊讶,如果迷你们搞砸了。在
如果已安装,请切换到lxml and use its built-in pretty-printing function。在
如果你因为某种原因xml.etree.ElementTree,您可以使用一个简单的递归函数在适当的位置美化树:
^{pr2}$用法很简单:
这将打印一个缩进的版本:
也就是说,从不使用“tostring”将XML树写入文件。在
总是用XML库提供的函数编写XML文件。在
相关问题 更多 >
编程相关推荐