【问题标题】:xmlns namespace attributed as key value pair in generated jsonxmlns 命名空间属性为生成的 json 中的键值对
【发布时间】:2017-11-29 09:48:28
【问题描述】:

我有一个用例,我需要 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"
      }
   }
}

我使用fasterxml jackson进行转换

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

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

【问题讨论】:

    标签: json xml jackson fasterxml woodstox


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多