В настоящее время я занимаюсь синтаксическим анализом 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
axsuul 13 Июл 2010 в 01:02

2 ответа

Лучший ответ

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

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

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

etree.tostring(tree, xml_declaration=True)
6
twasbrillig 14 Ноя 2014 в 05:19

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

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

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

0
Quentin 12 Июл 2010 в 21:06