66

xml.etree.ElementTreePythonで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>
4

2 に答える 2

71

そのためには、次の関数を使用できますtoprettyxml()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

于 2013-07-01T10:35:16.110 に答える
24

ElementTree のスーパーセットであるライブラリlxml (Note top level link is now spam) を使用できます。その tostring() メソッドには、パラメータpretty_printが含まれています- 例:

>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>
于 2013-07-01T10:39:57.617 に答える