簡體   English   中英

轉換 XML => JSON => 基於 XSD Schema 的 XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM