удаление lxmlтеги при разборе? - PullRequest
2 голосов
/ 13 июля 2010

В настоящее время я работаю с анализом документов XML (добавление элементов, добавление атрибутов и т. Д.).Поэтому мне нужно сначала разобрать XML, прежде чем работать над ним.Однако lxml, похоже, удаляет элемент <?xml ...>.Например,

from lxml import etree

tree = etree.fromstring('<?xml version="1.0" encoding="utf-8"?><dmodule>test</dmodule>', etree.XMLParser())
print etree.tostring(tree)

приведет к

<dmodule>test</dmodule>

Кто-нибудь знает, почему удаляется элемент <?xml ...>?Я думал, что теги кодирования были действительными XML.Спасибо за ваше время.

Ответы [ 2 ]

6 голосов
/ 13 июля 2010

Элемент <?xml> является объявлением XML, поэтому он не является строго элементом. Он просто дает информацию о дереве XML под ним.

Если вам нужно распечатать его с помощью lxml, здесь есть некоторая информация о флаге xmlDeclaration=TRUE, который вы можете использовать.

http://lxml.de/api.html#serialisation

etree.tostring(tree, xml_declaration=True)
0 голосов
/ 13 июля 2010

Кто-нибудь знает, почему удаляется элемент <?xml ...>?

XML по умолчанию имеет версию 1.0 в UTF-8, поэтому документ эквивалентен, если вы удалите их.

Вы анализируете некоторый XML в структуре данных и затем конвертируете эту структуру данных обратно в XML. Вы получите представление этой структуры данных в XML, но это может быть выражено не так (таким образом, можно удалить пролог и заменить <foo /> на <foo></foo> и т. Д.).

...