2017-05-07 3 views
1

누군가가 다음 상황을 나에게 조언을 줄 수 JAXB와 구문 분석 XML 파일을 처리 할 수 ​​어떻게하지 루트 요소에서

<?xml ... ?> 
    <root> 
    <listof_aaa> 
     <aaa>aaa_object</aaa> 
     <aaa>aaa_object</aaa> 
     ... 
    </listof_aaa> 
    <listof_bbb> 
     <bbb>bbb_object</bbb> 
     <bbb>bbb_object</bbb> 
     ... 
    </listof_bbb> 
    <listof_ccc> 
     <ccc>ccc_object</ccc> 
     <ccc>ccc_object</ccc> 
     ... 
    </listof_ccc> 
    </root> 

내 목표는 먼저 모든 aaa 객체를 읽은 다음 bbb 등을 읽는 것입니다 ... 루트 태그에 객체의 몇 가지 계열이있는 경우 어떻게 구조를 파싱 할 수 있습니까? JAXB 사용에 대해 생각했지만 이해할 수는 없지만,이 상황에서 얼마나 잘 작동 할 수 있을까요?

P. 모든 객체 군은 POJO입니다. 감사합니다. 귀하의 경우

+0

당신이 XML 스키마가 있습니까? 그렇다면 자동 생성 된 루트 클래스는 어떻게 생겼습니까? – Vitaliy

답변

0

일반적인 자동 생성 된 클래스는 다음과 같이 보일 것이다 :

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "listof_aaa", 
    "listof_bbb", 
    "listof_ccc", 
    "listinside" 
}) 
@XmlRootElement(name = "root") 
public class Root { 

    @XmlElement(required = true) 
    protected Listof_aaa listof_aaa; 
    protected Listof_bbb listof_bbb; 
    protected Listof_ccc listof_ccc; 
    protected java.util.List<Listinside> listinside // example of multiple elements with one node name under the root 

    public Listof_aaa getListof_aaa() { 
     return listof_aaa; 
    } 

    public void setListof_aaa(Listof_aaa value) { 
     this.listof_aaa = value; 
    } 

    // other getters and setters 
    // and an example of multiple elements under the root 

    public java.util.List<Listinside> getListinside() { 
    if (listinside == null) { 
     listinside = new ArrayList<Listinside>(); 
    } 
    return this.sec; 
} 
} 

반복하는 :

public static void main(String[] args) throws JAXBException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { 
     JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class); 
     Unmarshaller unmarhsaller = jaxbContext.createUnmarshaller(); 
     Root root = (Root) unmarhsaller.unmarshal(new File("pathToYourFile.xml")); 
     Listof_aaa listof_aa = root.getListof_aaa(); 

     /* and in case of a list */ 
     List<Listinside> listinside = root.getListinside(); 
     for (List myList : listinside) { 
      // do your stuff 
     } 
} 
+0

당신의 솔루션은 훌륭하게 작동합니다! 당신 덕분에. –