我知道很多答案在這裏建議這一點,但
minidom.parseString(ET.tostring(root)).toprettyxml(" ")
實際上是非常印刷XML文件真正可怕的方式。
它涉及到解析,與ET序列化,然後再解析,並用完全不同的XML庫再次序列化。這很愚蠢和浪費,如果迷你遊戲機弄亂了它,我不會感到驚訝。
如果你安裝了它,切換到lxml and use its built-in pretty-printing function。
如果您由於某種原因套牢xml.etree.ElementTree,你可以用一個簡單的遞歸函數來美化樹就地:
# xmlhelpers.py
# taken from http://effbot.org/zone/element-lib.htm#prettyprint
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
用法是直截了當:
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")
無法重現。請提供[mcve]。 –