私はここに多くの答えを実現するには、このことをお勧めしますが、
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'
これは、ではありません。 XMLツリーをファイルに書き込むために "tostring"を使用します。
XMLライブラリで提供されている関数を使用して、常にXMLファイルを記述します。
tree = ET.ElementTree(root) # only necessary if you don't already have a tree
tree.write(filename, encoding="UTF-8")
再生できません。 [mcve]を入力してください。 –