2016-10-04 69 views
0

我有這樣的XML,我想將它解析爲Java對象。用JAXB解析帶有更多子元素的XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<CreatePreOrderResponse> 
    <Errors> 
     <Error> 
      <Code>code 1</Code> 
      <Message>message 1</Message> 
      <ErrorElement>element 1</ErrorElement> 
     </Error> 
     <Error> 
      <Code>code 2</Code> 
      <Message>message 2</Message> 
      <ErrorElement>element 2</ErrorElement> 
     </Error> 
    </Errors> 
</CreatePreOrderResponse> 

JAXB工作,以解析沒有「子元素」,只有一個與它的價值在errors水平元素XML字符串。

問:我想知道如何讓所有Error元素Errors元素,例如進入List中CreatePreOrderResponse對象? 是否可能自動解析它JAXB unmarshaller ro我必須遍歷XML並手動解析它嗎?


注:只爲信息,這對我的作品 - 這些類我用解析這個XML(無子元素)。

<CreatePreOrderResponse> 
    <PreOrder> 
     <ID>123456789</ID> 
    </PreOrder> 
</CreatePreOrderResponse> 

BtnPreorderResponse

@XmlRootElement(name = "CreatePreOrderResponse") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlSeeAlso(BtnDocLine.class) 
public class BtnPreorderResponse { 

    @XmlElement(name = "PreOrder") 
    private BtnPreorder btnPreorder; 

    @XmlElement(name = "Errors") 
    private BtnErrorListType btnErrorListType; 

    public BtnPreorder getBtnPreorder() { 
     return btnPreorder; 
    } 

    public void setBtnPreorder(BtnPreorder btnPreorder) { 
     this.btnPreorder = btnPreorder; 
    } 

    public BtnErrorListType getBtnErrorListType() { 
     return btnErrorListType; 
    } 

    public void setBtnErrorListType(BtnErrorListType btnErrorListType) { 
     this.btnErrorListType = btnErrorListType; 
    } 

    @Override 
    public String toString() { 
     return "BtnPreorderResponse{" + 
       "btnPreorder=" + btnPreorder + 
       ", btnErrorListType=" + btnErrorListType + 
       '}'; 
    } 
} 

BtnPreorder

@XmlRootElement(name = "PreOrder") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class BtnPreorder { 

    @XmlElement(name = "ID") 
    private long id; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @Override 
    public String toString() { 
     return "BtnPreorder{" + 
       "id=" + id + 
       '}'; 
    } 
} 
+1

你似乎不包括最重要的類,BtnErrorListType –

回答

1

我想你已經實現單獨的錯誤子句類BtnErrorType。現在到了他們的名單:

@XmlType(name = "Errors") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class BtnErrorListType { 
    @XmlElement(name = "Error") 
    private ArrayList<BtnErrorType> btnError; 

    ... 
    public ArrayList<BtnErrorType> getBtnError() { 
     if (btnError == null) 
      btnError = new ArrayList<BtnErrorType>(); 
     return btnError; 
    } 
    ... 
} 

注意,世界上只有getter和你應該調用它,如果你想添加的元素列表。

+0

工程就像一個魅力! – Artegon