如何解决XML转换为JSON并返回Java中的XML
我使用XSLT将XML转换为JSON。我使用XSLT而不是Jackson / org.json,因为XSLT保留了名称空间信息。
例如,对于下面的SOAP XML请求,
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AccountDetailsRequest xmlns="http://com/blog/demo/webservices/accountservice">
<accountNumber>12345</accountNumber>
</AccountDetailsRequest>
</soap:Body>
</soap:Envelope>
将其转换为以下JSON。
{"soap:Envelope":{"soap:Body":{"AccountDetailsRequest":{"accountNumber":"12345"}}}}
名称空间定义丢失。但是,我打算将名称空间定义存储在地图中。
我使用Jackson / org.json [都返回相似的结果]将其转换回XML,然后得到以下XML:
<soap:Envelope>
<soap:Body>
<AccountDetailsRequest>
<accountNumber>12345</accountNumber>
</AccountDetailsRequest>
</soap:Body>
</soap:Envelope>
我唯一不知道的部分是添加命名空间定义的方法,前提是我可以将信息存储在地图中。
我考虑添加一个<root> </root>
及其所有名称空间,因为W3C标准指定这样做是一种有效的方法。但是SOAP不接受这种XML。
有什么方法可以获取具有正确名称空间信息的XML?
解决方法
当您说您正在使用XSLT进行转换时,我想这意味着您是在“手工”完成操作,而不是通过使用XSLT 3.0 xml-to-json()
函数(实际上无济于事)你在这里非常多。)
但是,如果您的代码有局限性,那么很难在没有看到代码的情况下为您提供帮助。
使用名称空间轴很容易找出元素范围内的所有名称空间,我不确定是否要尝试并弄错它,还是不知道该功能。这就是为什么我们需要查看您的代码。
似乎org.json转换器接受名称空间声明,例如:
String expectedStr =
"{\"addresses\":{\"address\":{\"name\":\"\",\"nocontent\":\"\","+
"\"something\":[1,2,3]},\"xsi:noNamespaceSchemaLocation\":\"test.xsd\",\""+
"xmlns:xsi\":\"http://www.w3.org/2001/XMLSchema-instance\"}}";
,因此您需要修改XML-to-JSON转换器以生成此类声明。您采用的代码可以做到
处理属性。在XSLT 2.0+中,您可以使用select =“ namespace :: *”以相同的方式处理名称空间。但是,正确地使用IIRC,XSLT 1.0不能匹配模式中的名称空间节点,因此,如果卡在1.0上,则需要使用类似的
<xsl:for-each select="namespace::*">
...
</xsl:for-each>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。