66

我正在尝试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>
4

2 回答 2

71

您可以使用功能toprettyxml()fromxml.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

您可以使用库lxml(注意顶级链接现在是垃圾邮件),它是 ElementTree 的超集。它的 tostring() 方法包含一个参数pretty_print - 例如:

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