转换 XML => JSON => 基于 XSD 架构的 XML

问题描述 投票:0回答:2

我看到了很多关于这个主题的帖子,但没有一个有答案。 实际上是否有一个 JAVA 库可以使用 XSD Schema 进行 XML => JSON => XML 的转换,以更好地处理 XML 中单个元素的问题。

(XML 中的单个元素可以是数组或单个对象,具体取决于 XSD 架构)

XML 示例:

    <root><person><name>test</name></person></root>

JSON 可以是:

    {"root": [{"person": [{"name": "test"}]}]}

或任何带有对象而不是数组的东西:

    {"root": {"person": {"name": "test"}}}

但是使用 XSD,我们可以从 maxoccurrs 参数中知道 root 是唯一的,person 是一个数组,name 是唯一的,所以好的转换是:

    {"root": {"person": 
        [{"name": "foofdo"}]
    }}

提前谢谢

java json xml xsd
2个回答
0
投票

如果您使用的是 Java 8 或更高版本,您应该查看我的开源库:unXml。 unXml 基本上从 Xpath 映射到 Json 属性。

它可以在 Maven Central 上找到。

示例

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.nerdforge.unxml.factory.ParsingFactory;
import com.nerdforge.unxml.parsers.Parser;
import org.w3c.dom.Document;

public class Parser {
  public ObjectNode parseXml(String xml){
    Parsing parsing = ParsingFactory.getInstance().create();
    Document document = parsing.xml().document(xml);

    Parser<ObjectNode> parser = parsing.obj("/root/person")
        .attribute("name")
        .build();

    ObjectNode result = parser.apply(document);
    return result;
  }
}

它将返回一个 Jackson

ObjectNode
,带有以下 json:

{"name":"test"}

数组示例

或者,如果您有多个

person
,您可以让它返回 Jackson
ArrayNode

import com.fasterxml.jackson.databind.node.ArrayNode;
import com.nerdforge.unxml.factory.ParsingFactory;
import com.nerdforge.unxml.parsers.Parser;
import org.w3c.dom.Document;

public class Parser {
  public ArrayNode parseXml(String xml){
    Parsing parsing = ParsingFactory.getInstance().create();
    Document document = parsing.xml().document(xml);

    Parser<ArrayNode> parser = parsing.arr("/root/person")
        .attribute("name")
        .build();

    ArrayNode result = parser.apply(document);
    return result;
  }
}

这将为您的输入创建以下 json:

[{"name":"test"}]

0
投票

underscore-java 库可以使用静态方法

U.xmlToJson(xml)
将 XML 转换为 JSON。要指定数组,可以使用属性
array="true"

© www.soinside.com 2019 - 2024. All rights reserved.