2016-10-04 2 views
0

Ich habe solche XML und ich möchte es in Java-Objekt analysieren.Parsing XML mit mehr Unterelementen mit JAXB

<?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> 

I arbeiten mit JAXB XML Zeichenfolge zu analysieren, die keine „Unterelemente“ hat, hat nur ein Element mit ihren Werten auf der Ebene der errors.

Frage: Ich würde gerne wissen, wie alle Error Elemente in Errors Elemente zu erhalten, z.B. in Liste in CreatePreOrderResponse Objekt? Ist es möglich es automatisch mit JAXB unmarshaller zu analysieren ro muss ich XML durchlaufen und es manuell analysieren?


HINWEIS: nur für Informationen, das funktioniert für mich - diese Klassen I für das Parsen von XML diese verwenden (ohne Unterelemente).

<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

Sie scheinen nicht die wichtigste Klasse zu enthalten, BtnErrorListType –

Antwort

1

Ich nehme an, Sie bereits einzelne Fehler Klausel als Klasse BtnErrorType implementiert haben. Jetzt kommt die Liste von ihnen:

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

Hinweis, dass es nur Getter ist, und Sie sollten es nennen, wenn Sie Elemente hinzufügen möchten aufzulisten.

+0

Funktioniert wie ein Charme! – Artegon