Подтвердить что ты не робот

Используйте xml.etree.elementtree для печати красиво отформатированных XML файлов.

Я пытаюсь использовать xml.etree.elementtree для записи XML файлов с помощью Python. Проблема в том, что они продолжают генерироваться в одну строку. Я хочу, чтобы можно было легко ссылаться на них, поэтому, если это возможно, я бы действительно хотел, чтобы выписка была аккуратно.

Это то, что я получаю

<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>
4b9b3361

Ответ 1

Вы можете использовать функцию 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")

Идея состоит в том, чтобы напечатать ваш Element в строке, проанализировать его, используя minidom, и снова преобразовать его в XML, используя функцию toprettyxml.

Источник: http://pymotw.com/2/xml/etree/ElementTree/create.html

Ответ 2

Вы можете использовать библиотеку lxml (обратите внимание, что ссылка верхнего уровня теперь является спамом), которая является надмножеством ElementTree. это Метод tostring() включает параметр pretty_print - например:

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