使用etree E-factory将xml命名空间属性添加到元素

问题描述 投票:0回答:1

我正在使用Python 3.7中E-FactoryElementMaker包的lxml.builder语法创建XML。我需要在元素中添加命名空间属性,但我无法在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')更改冒号是有效的,但当然不是预期的结果。

python python-3.x xml-parsing lxml xml.etree
1个回答
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'))
© www.soinside.com 2019 - 2024. All rights reserved.