Как вы получаете оригинальный текст из объекта etree - PullRequest
0 голосов
/ 10 мая 2019

У меня проблемы с поиском документации по этому вопросу.

У меня есть объект типа lxml.etree._ElementTree, и я пытаюсь получить исходный текст из него.

Объект был сгенерирован путем выполнения:

tree = etree.parse(content, parser=parser)

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

Я нашел ссылку на функцию tostring, но, похоже, это недопустимая функция.

Мысли

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

tostring - это не метод объекта дерева, а библиотека lxml.etree.

Так что попробуйте lxml.etree.tostring(tree).

Обратите внимание, что это может не совпадать ТОЛЬКО с исходным файлом - он должен анализировать тот же XML, но пробелы, переводы строки и другое форматирование могут отличаться. Кроме того, если вы внесли какие-либо изменения в дерево, оно, очевидно, не будет соответствовать исходному файлу.

1 голос
/ 10 мая 2019

tostring - допустимая функция, возможно, вы используете ее неправильно. Вот полностью приведенный пример:

from lxml import etree

text = """
<?xml version="1.0" ?>
<people>
  <person>
    <id>1</id>
    <name>Hal</name>
    <notes>Hal likes chocolate</notes>
  </person>
</people>"""

root = etree.fromstring(text)
etee.tostring(root)
# outputs the following
'<people>\n  <person>\n    <id>1</id>\n    <name>Hal</name>\n    <notes>Hal likes chocolate</notes>\n  </person>\n</people>'
...