gpt4 book ai didi

java - 转换 XML => JSON => 基于 XSD 模式的 XML

转载 作者:行者123 更新时间:2023-12-05 07:39:33 24 4
gpt4 key购买 nike

我看到了很多关于这个主题的话题,但没有一个有答案。是否真的有一个 JAVA 库可以使用 XSD 模式转换 XML => JSON => XML 以更好地处理 XML 中单个元素的问题。

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

XML 示例:

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

JSON 可以是:

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

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

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

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

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

提前致谢

最佳答案

如果您使用的是 Java 8 或更高版本,您应该查看我的开源库:unXml . unXml 基本上从 Xpaths 映射到 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 数组节点

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"}]

关于java - 转换 XML => JSON => 基于 XSD 模式的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com