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))
在上述基础上,您可以使用以下方法将其转换为 json xmlschema.to_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"}}}