[英]Python/XML: Pretty-printing ElementTree
我使用ElementTree XML API构造 XML,我希望能够漂亮地打印
我可以使用ET.write()
将我的 XML 写入文件,然后使用在 Python中的漂亮打印 XML 中的许多建议漂亮地打印它。 但是,这需要我序列化然后反序列化 XML(到磁盘或到StringIO )只是为了再次漂亮地序列化它 - 这显然是次优的。
那么,有没有办法漂亮地打印xml.etree.ElementTree
?
我在使用漂亮的印刷品时遇到了问题。 深入研究它,我找到了以下对我有用的解决方案。
import xml.etree.cElementTree as etree
from xml.dom import minidom
root = etree.Element("root")
animal = etree.SubElement(root, "animal")
etree.SubElement(animal, "pet").text = "dog"
xmlstr =
minidom.parseString(etree.toString(root)).toprettyxml(indent = " ")
print (xmlstr)
以 XML 格式返回结果
正如文档所说,在write
方法中:
file是文件名,或为写入而打开的文件对象。
这包括一个StringIO
对象。 所以:
outfile = cStringIO.StringIO()
tree.write(of)
然后,你可以漂亮地打印outfile
使用您喜欢的方法,只是outfile.seek(0)
然后通过outfile
本身,需要一个文件中的函数,或通过outfile.getvalue()
给带有字符串的函数。
但是,请注意,在您链接的问题中,许多漂亮地打印 XML 的方法甚至不需要这样做。 例如:
lxml.etree.tostring
(答案 #2) : lxml.etree
是 stdlib etree 的近乎完美的超集,因此如果您打算使用它进行漂亮的打印,只需首先使用它来构建 XML .indent
/ prettyprint
(答案 #3) :这需要一个ElementTree
树,这正是您已经拥有的树,而不是字符串或文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.