it-swarm.com.de

Verwenden Sie xml.etree.elementtree, um schön formatierte XML-Dateien zu drucken

Ich versuche, mit xml.etree.elementtree XML-Dateien mit Python zu schreiben. Das Problem ist, dass sie immer in einer einzigen Zeile generiert werden. Ich möchte in der Lage sein, sie leicht zu referenzieren, also, wenn es möglich ist, möchte ich in der Lage sein, das sauber ausschreiben zu lassen.

Das bekomme ich

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

Das würde ich gerne sehen.

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

Sie können die Funktion toprettyxml() von xml.dom.minidom um das zu tun:

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

Die Idee ist, Ihr Element in einer Zeichenkette zu drucken, es mit minidom zu analysieren und es mit der Funktion toprettyxml erneut in XML zu konvertieren.

Quelle: http://pymotw.com/2/xml/etree/ElementTree/create.html

59
Maxime Chéramy

Sie können die Bibliothek lxml verwenden, die eine Obermenge von ElementTree ist. Die tostring () -Methode enthält einen Parameter pretty_print - zum Beispiel:

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