使用xml.etree.elementtree打印格式良好的xml文件

时间:2013-07-01 10:30:41

标签: python xml elementtree

我正在尝试使用xml.etree.elementtree用Python写出xml文件。问题在于它们不断生成一行。我希望能够轻松地引用它们,所以如果可能的话我真的希望能够干净利落地写出来。

这就是我得到的

<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>

2 个答案:

答案 0 :(得分:58)

您可以使用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

答案 1 :(得分:21)

您可以使用库lxml,它是ElementTree的超集。它的 tostring()方法包含参数pretty_print - 例如:

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