lxml - TypeError: write() получил неожиданный аргумент ключевого слова "default_namespace"

Ниже приведен минимальный рабочий пример. Я проверил это с Python 3.4, Python 3.6 32 бит и Python 3.6 64 бит.

import io
from lxml import etree

test_node = etree.fromstring('''
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
  <soap:Body>
     <ns1:RequestSecurityToken/>
  </soap:Body>
</soap:Envelope>''')
output = io.BytesIO(b'<?xml version="1.0" encoding="UTF-8"?>')
test_node.getroottree().write(output,
                         encoding="UTF-8",
                         xml_declaration=None,
                         default_namespace=None,
                         method="c14n",
                         short_empty_elements=False
                         )
output.seek(0)
print(output.read())

Результат:

Traceback (most recent call last):
  File "C:/not_telling/c14n.py", line 16, in <module>
    short_empty_elements=False
  File "lxml.etree.pyx", line 1869, in lxml.etree._ElementTree.write (src\lxml\lxml.etree.c:57004)
TypeError: write() got an unexpected keyword argument 'short_empty_elements'

Я только что обновил версию lxml до 4.0.0. (Но та же самая проблема с 3.7.)

Мне нужно экспортировать с помощью метода C14N, и (хотя он и не включен в пример) мне также нужно указать список пространств имен, которые должны отображаться в результирующей канонической форме. Например, я должен использовать параметр inclusive_ns_prefixes тоже.

ОБНОВЛЕНИЕ: фактически, это, кажется, проблема со встроенным модулем xml Python, а не lxml.

Вот метод, который я вызываю:

https://github.com/python/cpython/blob/master/Lib/xml/etree/ElementTree.py

У него есть параметр short_empty_elements, но он не принимает его.

1 ответ

Решение

default_namespace а также short_empty_elements параметры не поддерживаются _ElementTree.write() метод в lxml. См. http://lxml.de/api/lxml.etree._ElementTree-class.html.

Однако оба параметра доступны в ElementTree стандартный модуль начиная с Python 3.4. См. https://docs.python.org/3/library/xml.etree.elementtree.html.

Другие вопросы по тегам