Добавление атрибута пространства имен xml к элементу с помощью etree E-factory - PullRequest
0 голосов
/ 25 февраля 2019

Я создаю XML с использованием синтаксиса E-Factory пакета ElementMaker из lxml.builder в Python 3.7.Мне необходимо добавить атрибут namespaced к элементу, но я не могу найти документацию или подтверждение этой функции в ElementMaker.

Пример целевого xml (проблема заключается в создании атрибута gml:id):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLDocument gml:id="THE_ID" xmlns:gml="some-uri">
    body data...
</XMLDocument>

Что я пробовал:

from lxml.builder import ElementMaker
import lxml.etree as etree

NS = ElementMaker(nsmap={'gml': 'some-uri'})
my_doc = NS.XMLDocument('body data...', **{"gml:id": "THE_ID"})
print(etree.tostring(my_doc, pretty_print=True, encoding='utf-8', xml_declaration=True).decode('utf-8'))

Это исключение:

ValueError: Invalid attribute name 'gml:id'

Обратите внимание, что изменение двоеточия, например,тире ('gml-id') работает, но, конечно, это не ожидаемый результат.

1 Ответ

0 голосов
/ 25 февраля 2019

Только что нашел решение, используя синтаксис ElementTree.Это будет код Python:

from lxml.builder import ElementMaker
import lxml.etree as etree

NS = ElementMaker(nsmap={'gml': 'some-uri'})
my_doc = NS.XMLDocument('body data...', **{"{some-uri}id": "THE_ID"})
print(etree.tostring(my_doc, pretty_print=True, encoding='utf-8', xml_declaration=True).decode('utf-8'))
...