2017-10-31 21 views
0

このトピックでは多くのスレッドが見つかりましたが、答えはありません。 XMLの単一要素の問題をよりよく処理するために、XML => JSON => XMLをXSDスキーマを使用して変換できるJAVAライブラリが実際にありますか。変換XML => JSON => XSDスキーマに基づくXML

(XML内の単一の要素がアレイまたはXSDスキーマに依存し、単一のオブジェクトであることができる)XMLの

例:

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

JSONにすることができる:

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

配列の代わりにオブジェクトを持つもの:

{"root": {"person": {"name": "test"}}} 
ルートが一意であるmaxOccursのパラメータから210

しかし、XSDで、我々は知っているだろう、人は配列であり、名前は一意である、とても良い変換は次のようになります。事前に

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

Thxを

+0

をあなたが「XMLでの単一の要素の問題」の意味を正確に、より詳細に説明できますか?何が問題なのかがはっきりしないからです。あなたが意味するものを示すためにXMLとJSONの例を提供してください。 – Jesper

+0

XMLのユニークな要素がJSONの配列やオブジェクトとして表現されなければならないのか、XSDを使ってこの問題に対処するJAVAライブラリが見つからないのかという問題は、 XML文書 –

+0

投稿した配列のJSONが無効です。配列には、 'key:value'のペアはなく、値はコンマで区切られています。 – Jesper

答えて

0

あなたの場合Java 8以降を使用している場合は、オープンソースライブラリunXmlをチェックアウトする必要があります。 unXmlは基本的にXpathsからJson-attributesにマップします。

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; 
    } 
} 

それは次のようなJSONで、JacksonObjectNodeを返します。

{"name":"test"} 

アレイの例

Alternativly複数personを持っている場合は、あなたができますそれを後退させるnはJacksonArrayNode

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"}] 
関連する問題