关于python:使用xml.etree.elementtree打印格式良好的xml文件

Use xml.etree.elementtree to print nicely formatted xml files

本问题已经有最佳答案,请猛点这里访问。

我正在尝试使用xml.etree.elementtree用python编写XML文件。问题是它们总是在一行中生成。我希望能够很容易地引用它们,所以如果可能的话,我真的希望能够把它们写得很清楚。

这就是我要得到的

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

这就是我想看到的。

1
2
3
4
5
6
7
8
9
10
<Language>
    <En>
        <Port>Port</Port>
        <UserName>UserName</UserName>
    </En>
    <Ch>
        <Port>IP地址</Port>
        <UserName>用户名称</UserName>
    </Ch>
</Language>


您可以使用来自xml.dom.minidom的函数toprettyxml(),以便执行以下操作:

1
2
3
4
5
6
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


可以使用库lxml,它是elementtree的超集。它的toString()方法包括一个参数pretty_print-例如:

1
2
3
4
5
6
>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>