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

The*_*rry 49 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>
Run Code Online (Sandbox Code Playgroud)

这是我想看到的.

<Language>
    <En>
        <Port>Port</Port>
        <UserName>UserName</UserName>
    </En>
    <Ch>
        <Port>IP??</Port>
        <UserName>????</UserName>
    </Ch>
</Language>
Run Code Online (Sandbox Code Playgroud)

Max*_*amy 59

您可以使用该功能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")
Run Code Online (Sandbox Code Playgroud)

我们的想法是Element在字符串中打印,使用minidom解析它并使用该toprettyxml函数再次在XML中进行转换.

资料来源:http://pymotw.com/2/xml/etree/ElementTree/create.html

  • 这增加了额外的线条.不确定我会说那么漂亮. (12认同)
  • 对于大文件,虽然这需要重新整理整个XML.嗯... (5认同)
  • @steve:这不仅添加了另一行,数据的处理方式如下:将 XML 树转换为字符串,将其转换回 XML 树,然后将其转换回字符串。这不漂亮,这完全不可能。 (2认同)
  • 至少它可以通过普通的 Python 安装开箱即用。 (2认同)

use*_*019 21

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

>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>
Run Code Online (Sandbox Code Playgroud)

  • etree.tostring(root, Pretty_print=True).decode() 有效! (2认同)