使用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
相关产品推荐
相关产品推荐

