Используйте 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>
Ответы
Ответ 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>