无法使用 xmlschema.from_json
Fail to use xmlschema.from_json
我一直在左右寻找答案。甚至 Whosebug 也只有 1 个类似的问题,但答案对我来说不起作用。我无法验证 xml 并不断收到此错误:
“无法 select 用于解码数据的元素,请提供有效的 'path' 参数。”
我的目标是通过验证将 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, 命名空间={'': 'urn:oasis:names:tc:emergency:cap:1.2'})
我一直在左右寻找答案。甚至 Whosebug 也只有 1 个类似的问题,但答案对我来说不起作用。我无法验证 xml 并不断收到此错误:
“无法 select 用于解码数据的元素,请提供有效的 'path' 参数。”
我的目标是通过验证将 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()
:
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, 命名空间={'': 'urn:oasis:names:tc:emergency:cap:1.2'})