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

使用xmlschema从JSON生成XML报错:无法选择解码元素

解决xmlschema库无targetNamespace时的编码错误

当使用xmlschema库将JSON/dict转回XML时,若XSD未指定targetNamespace,会触发XMLSchemaEncodeError: unable to select an element for decoding data错误——这是因为库无法自动确定要使用的根元素结构。

解决方案:明确指定根元素的path参数

从你使用的XSD来看,顶层根元素是measure,只需在from_json调用中添加path参数指定该元素即可:

import xmlschema
import json

schema = xmlschema.XMLSchema(xsd_path)
# 验证XML并转为字典
print(schema.is_valid(xml_path))
d = schema.to_dict(xml_path)
print(d)
json_data = json.dumps(d)
# 从JSON转回XML,指定根元素路径
xml = xmlschema.from_json(json_data, schema=schema, path="measure", preserve_root=True)

替代方案:直接调用根元素的编码方法

也可以直接从schema中获取根元素对象,再执行编码操作:

import xmlschema
import json

schema = xmlschema.XMLSchema(xsd_path)
d = schema.to_dict(xml_path)
json_data = json.dumps(d)
# 获取根元素并编码
root_element = schema.elements["measure"]
xml = root_element.encode(json.loads(json_data), preserve_root=True)

原因说明

当XSD没有targetNamespace时,schema的元素集合没有命名空间前缀,库无法自动匹配JSON/dict对应的根元素。通过path参数或直接指定根元素对象,就能明确告诉库要使用的顶层结构,解决编码时的元素选择问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:13:00