【发布时间】:2020-08-22 04:51:26
【问题描述】:
我使用 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?
【问题讨论】:
-
使用 XML Dom setAttribute API 怎么样?
-
如果必须在某个元素(不仅仅是根元素)上添加命名空间属性,您可以使用该元素的路径作为映射键。这个问题还包含一些关于这个主题的建议:stackoverflow.com/questions/4056419/…
-
Underscore-java库可以将xml转json并保存所有属性。