web-dev-qa-db-ja.com

xml.etree.elementtreeを使用して、適切にフォーマットされたxmlファイルを印刷します

Pythonでxml.etree.elementtreeを使用してxmlファイルを書き込もうとしています。問題は、それらが1行で生成され続けることです。それらを簡単に参照できるようにしたいので、可能であれば、きれいに書き出すことができるようにしたいです。

これは私が得ているものです

<Language><En><Port>Port</Port><UserName>UserName</UserName></En><Ch><Port>IP地址</Port><UserName>用户名称</UserName></Ch></Language>

これは私が見たいものです。

<Language>
    <En>
        <Port>Port</Port>
        <UserName>UserName</UserName>
    </En>
    <Ch>
        <Port>IP地址</Port>
        <UserName>用户名称</UserName>
    </Ch>
</Language>
46
TheBeardedBerry

関数 toprettyxml() from xml.dom.minidom それを行うには:

def prettify(elem):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="\t")

Elementを文字列で出力し、minidomを使用して解析し、toprettyxml関数を使用してXMLに再度変換するという考え方です。

ソース: http://pymotw.com/2/xml/etree/ElementTree/create.html

59
Maxime Chéramy

ライブラリ lxml を使用できます。これはElementTreeのスーパーセットです。そのtostring()メソッドには、パラメータ pretty_print -が含まれます。例:

>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>
21
Mark