2017-10-31 8 views
0

이 주제에 관해서 많은 스레드를 보았지만 대답이 없습니다. 실제로 XML의 단일 요소 문제를 더 잘 처리하기 위해 XSD 스키마를 사용하여 XML => JSON => XML로 변환 할 수있는 JAVA 라이브러리가 있습니까?변환 XML => JSON => XSD 스키마를 기반으로 한 XML

XML 용

예 (XML의 단일 소자가 배열 또는 XSD 스키마에 따라 하나의 객체 일 수있다) :

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

JSON 될 수

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

또는 배열 대신 객체가있는 모든 것 :

{"root": {"person": {"name": "test"}}} 
루트가 고유 한 maxOccurs에 매개 변수에서210

그러나 XSD으로 우리가 알고있는 것, 사람은 배열이며 이름은 고유하므로 좋은 변환은 다음과 같습니다 사전에

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

들으

+0

당신이 "XML의 단일 요소의 문제"뜻 정확히 무엇을 더 자세히 설명 할 수 있습니까? 그 문제가 무엇인지는 분명하지 않기 때문입니다. 의미있는 것을 보여주기 위해 예제 XML 및 JSON을 제공하십시오. – Jesper

+0

지금은 더 명확 해지기를 바랍니다. 문제는 XML의 고유 요소가 배열 또는 JSON의 객체로 표시되어야하는지, XSD를 사용하여이 문제를 다루는 자바 라이브러리를 찾을 수 없는지를 확인하는 것입니다. 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"}]