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

如何创建带json:Array属性的XML元素?lxml报无效命名空间前缀错

解决lxml创建带json:Array属性XML元素的错误

错误原因

你把属性当成了命名空间映射来处理。nsmap参数的作用是定义命名空间前缀与URI的对应关系,而非直接设置元素属性。json:Array是带命名空间前缀的属性,需要先正确声明命名空间,再设置属性。

正确实现方式

首先明确json前缀对应的标准命名空间(通常为http://james.newtonking.com/projects/json,这是XML与JSON互转场景中常用的命名空间),再通过元素的属性参数设置json:Array="true"。

代码示例

from lxml.etree import Element, tostring

# 定义json命名空间的URI
JSON_NS = "http://james.newtonking.com/projects/json"
# 创建元素:先通过nsmap声明json前缀,再设置带命名空间的属性
foo = Element("foo", nsmap={"json": JSON_NS})
# 用{命名空间URI}属性名的方式设置带前缀的属性
foo.set(f"{{{JSON_NS}}}Array", "true")

# 输出XML
print(tostring(foo, encoding="unicode"))

输出结果

<foo xmlns:json="http://james.newtonking.com/projects/json" json:Array="true"/>

补充说明

如果当前上下文已提前声明过json命名空间(比如父元素已包含命名空间声明),也可以直接用前缀设置属性,但这种方式容易引发命名空间未声明的错误,更推荐上面显式声明命名空间的写法:

from lxml.etree import Element, tostring

foo = Element("foo")
# 前提:当前上下文已存在json命名空间的声明
foo.set("json:Array", "true")

内容的提问来源于stack exchange,提问作者Mujeeb Ur Rehman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:03