[英]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.