Python довольно XML-принтер для XML-строки - PullRequest
7 голосов
/ 20 октября 2010

Я генерирую длинную и некрасивую строку XML с помощью python, и мне нужно отфильтровать ее через симпатичный принтер, чтобы она выглядела лучше.

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

Какие инструменты на языке Python, работающие со строками, доступны?

Ответы [ 2 ]

16 голосов
/ 20 октября 2010

Вот как разобрать текстовую строку в структурированный тип данных lxml.

Python 2:

from lxml import etree
xml_str = "<parent><child>text</child><child>other text</child></parent>"
root = etree.fromstring(xml_str)
print etree.tostring(root, pretty_print=True)

Python 3:

from lxml import etree
xml_str = "<parent><child>text</child><child>other text</child></parent>"
root = etree.fromstring(xml_str)
print(etree.tostring(root, pretty_print=True).decode())

Выходы:

<parent>
  <child>text</child>
  <child>other text</child>
</parent>
6 голосов
/ 20 октября 2010

Я использую библиотеку lxml, и там все просто:

>>> print(etree.tostring(root, pretty_print=True))

Вы можете выполнить эту операцию, используя любой etree, который вы можете сгенерировать программно или прочитать из файла.

Если вы используете DOM из PyXML, это

import xml.dom.ext
xml.dom.ext.PrettyPrint(doc)

, который печатает на стандартный вывод, если вы не укажете альтернативный поток.

http://pyxml.sourceforge.net/topics/howto/node19.html

Чтобы напрямую использовать минидом, вы хотите использовать функцию toprettyxml().

http://docs.python.org/library/xml.dom.minidom.html#xml.dom.minidom.Node.toprettyxml

...