簡體   English   中英

使用JAXB解析帶有更多子元素的XML

[英]Parsing XML with more sub-elements with JAXB

我有這樣的XML,我想將其解析為Java對象。

<?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一起使用來解析XML字符串,該字符串沒有“子元素”,只有一個元素,其值處於errors級別。

問題:我想知道如何獲取Errors元素中的所有Error元素,例如進入CreatePreOrderResponse對象的List中? 是否可以使用JAXB解組器自動解析它,我是否必須遍歷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 +
                '}';
    }
}

Btn預購

@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 +
                '}';
    }
}

我想您已經將單獨的錯誤子句實現為類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,如果要向列表中添加元素,則應調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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