如何解决无法使用 xmlschema.from_json
我一直在左右寻找答案。即使 stackoverflow 只有 1 个类似的问题,但答案在我的情况下不起作用。我无法验证 xml 并不断收到此错误:
“无法选择用于解码数据的元素,请提供有效的‘路径’参数。”
我的目标是通过验证将 json 数据转换为 xml。有人知道吗?
下面是我的简单代码:
import xmlschema
import json
from xml.etree import ElementTree
my_xsd = '<?xml version="1.0"?><schema targetNamespace = "urn:oasis:names:tc:emergency:cap:1.2" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <element name="note" type="xs:string"/><element name="age" type="xs:integer"/> </schema>'
schema = xmlschema.XMLSchema(my_xsd)
#jdata = xmlschema.to_json(xml_document = """<note>this is a Note text</note>""",schema = schema)
#jsonData = json.dumps(jdata)
data = json.dumps({'note': 'this is a Note text','age':'5'})
#print (jdata)
#print (jsonData)
print(data)
xml = xmlschema.from_json(data,schema=schema)
ElementTree.dump(xml)
解决方法
xsd 中没有错误。这是一个简化版本(我去掉了 json 处理,以了解文档是否有效)。
下面可以在不使用json的情况下解码xml文档:
import xmlschema
import datetime
import xml.etree.ElementTree as ET
CAPSchema=xmlschema.XMLSchema('https://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2.xsd')
xmldoc="""<?xml version = "1.0" encoding = "UTF-8"?><alert xmlns = "urn:oasis:names:tc:emergency:cap:1.2"><identifier>43b080713727</identifier>
<sender>hsas@dhs.gov</sender><sent>2003-04-02T14:39:01-05:00</sent><status>Actual</status><msgType>Alert</msgType><scope>Public</scope>
<info><category>Security</category><event>Homeland Security Advisory System Update</event><urgency>Immediate</urgency><severity>Severe</severity>
<certainty>Likely</certainty><senderName>U.S. Government,Department of Homeland Security</senderName><headline>Homeland Security Sets Code ORANGE</headline>
<description>The Department of Homeland Security has elevated the Homeland Security Advisory.</description>
<instruction> A High Condition is declared when there is a high risk of terrorist attacks.</instruction><web>http://www.dhs.gov/dhspublic/display?theme=29</web>
<parameter><valueName>HSAS</valueName><value>ORANGE</value></parameter><resource><resourceDesc>Image file (GIF)</resourceDesc>
<mimeType>image/gif</mimeType><uri>http://www.dhs.gov/dhspublic/getAdvisoryImage</uri></resource><area><areaDesc>U.S. nationwide and interests worldwide</areaDesc></area></info></alert>"""
decoded_xml = CAPSchema.to_dict(xmldoc,"/alert")
print(decoded_xml)
##just showing you can pretty print
pprint(CAPSchema.to_dict(xmldoc))
在以上内容的基础上,您可以通过以下方式使用 xmlschema.to_json()
将其转换为 json:
import json
xml_as_json = xmlschema.to_json(xmldoc,schema=CAPSchema,converter = xmlschema.ParkerConverter)
这是我从上面打印出 xml_as_json 的输出:
print(xml_as_json)
{"identifier": "43b080713727","sender": "hsas@dhs.gov","sent": "2003-04-02T14:39:01-05:00","status": "Actual","msgType": "Alert","scope": "Public","info": {"category": "Security","event": "Homeland Security Advisory System Update","urgency": "Immediate","severity": "Severe","certainty": "Likely","senderName": "U.S. Government,Department of Homeland Security","headline": "Homeland Security Sets Code ORANGE","description": "The Department of Homeland Security has elevated the Homeland Security Advisory.","instruction": " A High Condition is declared when there is a high risk of terrorist attacks.","web": "http://www.dhs.gov/dhspublic/display?theme=29","parameter": {"valueName": "HSAS","value": "ORANGE"},"resource": {"resourceDesc": "Image file (GIF)","mimeType": "image/gif","uri": "http://www.dhs.gov/dhspublic/getAdvisoryImage"},"area": {"areaDesc": "U.S. nationwide and interests worldwide"}}}
,
我向 xmlschema creator 寻求帮助,结果我需要额外的参数: from_json(jsonTxt,schema = CAPSchema,preserve_root=True,namespaces={'': 'urn:oasis:names:tc:emergency:cap:1.2'})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。