0

我有一个用例,我需要 xmlns 命名空间属性作为从 xml 生成的 json 中的键值对。但目前我无法这样做,因为命名空间被忽略了。

xml 是

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Reference Uri="../VOC_Core/$metadata">
    <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core" />
</edmx:Reference>
<edmx:DataServices>
    <Schema Namespace="EPMSample" xmlns="http://docs.oasis-open.org/odata/ns/edm">
    </Schema>
</edmx:DataServices>

生成的json

 {  
   "Version":"4.0",
   "Reference":{  
      "Uri":"../VOC_Core/$metadata",
      "Include":{  
         "Namespace":"Org.OData.Core.V1",
         "Alias":"Core"
      }
   },
   "DataServices":{  
      "Schema":{  
         "Namespace":"EPMSample"
      }
   }
}

我使用fastxml jackson进行转换

XmlMapper xmlMapper = new XmlMapper();
JsonNode node = xmlMapper.readTree(xml.getBytes());
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(node);

如何将 xmlns 属性作为键值对包含在 json 中我需要做哪些配置才能保留 xmlns 属性?

4

1 回答 1

0

Java XML 绑定没有定义任何机制来保存来自原始 XML 的名称空间绑定信息。因此,当您需要此信息时,您需要停止使用与 Jackson 或类似的 XML 绑定。

相反,您可以使用通用 XML 库(例如 JDOM 2)并将您的 XML 读取为 DOM,您可以从中提取所有相关信息,包括名称空间绑定,并将它们放入您首选的 Java 对象表示中。

完成后,您可以返回到 JSON 绑定,将获取的 Java 对象转换为 JSON。

为简单起见,您可能更喜欢混合使用:像往常一样使用 jackson 将 XML 解组为 Map,然后使用 JDOM 2 提取名称空间并将它们添加到您的 Map。

于 2017-11-29T11:33:41.287 回答