[英]Conversion XML => JSON => XML based on a XSD Schema
我看到了很多關於這個主題的帖子,但沒有一個有答案。 實際上是否有一個 JAVA 庫可以使用 XSD Schema 進行 XML => JSON => XML 的轉換,以更好地處理 XML 中單個元素的問題。
(XML 中的單個元素可以是數組或單個對象,具體取決於 XSD 架構)
XML 示例:
<root><person><name>test</name></person></root>
JSON 可以是:
{"root": [{"person": [{"name": "test"}]}]}
或任何帶有 object 而不是 array 的東西:
{"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"}
數組示例
Alternativly如果你有多個person
,你可以把它返回傑克遜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"}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.