无法使用 xmlschema.from_json

如何解决无法使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?