You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为lxml Element添加属性?xmlns:xsi属性添加报错求助

解决lxml ElementMaker添加带冒号属性(如xmlns:xsi)的问题

这个问题我之前也碰到过!核心原因是Python的关键字参数语法不允许包含冒号,所以直接写xmlns:xsi="..."肯定会报错,哪怕给属性名加引号也没用。下面给你两种可行的解决办法:

方法1:使用字典展开传递带特殊字符的属性

把带冒号的属性放在字典里,通过**语法展开作为关键字参数传递,这样就能绕过Python的关键字参数限制:

from lxml.builder import ElementMaker

E = ElementMaker()
outer = E.outer
header = E.Header
field1 = E.field1
field2 = E.field2

# 定义包含命名空间属性的字典
ns_attrs = {
    "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance"
}

# 构建文档,用**展开属性字典
the_doc = outer(
    **ns_attrs,
    header(
        field1('some value1', name='blah'),
        field2('some value2', name='asdfasd'),
    )
)

方法2:先创建元素,再用set()方法添加属性

如果觉得字典展开不够直观,也可以先创建outer元素,再调用元素的set()方法手动添加带冒号的属性:

from lxml.builder import ElementMaker

E = ElementMaker()
header = E.Header
field1 = E.field1
field2 = E.field2

# 先创建outer元素(不带命名空间属性)
the_doc = E.outer(
    header(
        field1('some value1', name='blah'),
        field2('some value2', name='asdfasd'),
    )
)

# 手动添加xmlns:xsi属性
the_doc.set("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")

另外注意你代码里的小错误:你定义了header = E.Header,但构建文档时写的是XML_2_HEADER,这会导致NameError,记得改成header哦。

内容的提问来源于stack exchange,提问作者Jal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:33:53