python-使用xml.etree.elementtree来打印格式正确的xml文件

这个问题已经在这里有了答案:

  • 用Python漂亮地打印XML                                     21个答案

我正在尝试使用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>
TheBeardedBerry asked 2020-02-13T22:06:51Z
2个解决方案
59 votes

您可以使用Element中的功能Element来做到这一点:

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]

Maxime Chéramy answered 2020-02-13T22:07:13Z
21 votes

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

>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>
user151019 answered 2020-02-13T22:07:34Z
translate from https://stackoverflow.com:/questions/17402323/use-xml-etree-elementtree-to-print-nicely-formatted-xml-files