向具有etree Efactory的元素添加xml命名空间属性

2024-09-27 20:15:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.7中来自lxml.builderElementMaker包的E-Factory语法创建一个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')等方式更改冒号是可行的,但当然不是预期的结果。你知道吗


Tags: theid属性builderbodysomexmluri
1条回答
网友
1楼 · 发布于 2024-09-27 20:15:40

刚刚用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'))

相关问题 更多 >

    热门问题