我正在使用Python 3.7中ElementMaker
的{{1}}包的E-Factory语法创建XML。我需要在元素上添加命名空间属性,但是在lxml.builder
中找不到此功能的文档或证据。
目标xml示例(问题是生成ElementMaker
属性):
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'
)来更改冒号是可行的,但当然不是预期的结果。
答案 0 :(得分:0)
只是使用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'))