Избавляемся от кодировки в lxml - PullRequest
1 голос
/ 24 мая 2010

Я пытаюсь напечатать файл XML, используя lxml и Python.

Вот код:

>>> from lxml import etree
>>> root = etree.Element('root')
>>> child = etree.SubElement(root, 'child')
>>> print etree.tostring(root, pretty_print = True, xml_declaration = True, encoding = None)

Вывод:

<?xml version='1.0' encoding='ASCII'?>
<root>
  <child/>
</root>

Как вы можетевидите, я объявил encoding = None, однако он все еще показывает encoding = 'ASCII' в конечном выводе.Что, я думаю, ожидается.Если я не добавлю тег encoding, он все равно покажет ASCII.

Можно ли как-нибудь получить тег версии XML, а не часть кодирования?Я хочу, чтобы вывод был таким:

<?xml version='1.0'>

1 Ответ

0 голосов
/ 24 мая 2010

Неважно, что выводит lxml.etree, если это допустимый XML.Если вы действительно хотите, вы можете склеить строки:

'<?xml version="1.0"?>\n' + etree.tostring(root, pretty_print = True, encoding = 'ASCII')

Непонятно, почему вы хотите удалить его, поскольку в конечном итоге XML должен знать, в какой кодировке он находится, чтобы иметь смысл.Спецификация XML 1.0 включает метод угадывания кодировок и, по-видимому, поощряет использование объявлений кодирования:

При отсутствии [внешней информации] это фатальная ошибка... для объекта, который не начинается ни с метки порядка байтов, ни с декларации кодирования, чтобы использовать кодировку, отличную от UTF-8.

...

Если кодировка не определяетсяпротокол более высокого уровня, это также фатальная ошибка, если объект XML не содержит декларации кодирования и его содержимое не является допустимым UTF-8 или UTF-16.

...