web-dev-qa-db-fra.com

Utilisez xml.etree.elementtree pour imprimer des fichiers XML bien formatés

J'essaie d'utiliser xml.etree.elementtree pour écrire des fichiers XML avec Python. Le problème est qu'ils continuent à être générés sur une seule ligne. Je veux pouvoir les référencer facilement, donc si c'est possible, j'aimerais vraiment pouvoir écrire correctement.

C'est ce que je reçois

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

C'est ce que j'aimerais voir.

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

Vous pouvez utiliser la fonction toprettyxml() à partir de xml.dom.minidom pour le faire:

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

L'idée est d'imprimer votre Element dans une chaîne, de l'analyser à l'aide de minidom et de le convertir à nouveau en XML à l'aide de la fonction toprettyxml.

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

59
Maxime Chéramy

Vous pouvez utiliser la bibliothèque lxml , qui est un sur-ensemble de ElementTree. Sa méthode tostring () inclut un paramètre pretty_print - par exemple:

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