【问题标题】:Adding an xml namespaced attribute to an element with etree E-factory使用 etree E-factory 将 xml 命名空间属性添加到元素
【发布时间】:2019-07-18 21:59:39
【问题描述】:

我正在使用 Python 3.7 中 lxml.builder 中的 ElementMaker 包的 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') 更改冒号是可行的,但当然不是预期的结果。

【问题讨论】:

    标签: python python-3.x xml-parsing lxml xml.etree


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多