2016-10-04 3 views
0

У меня такой XML, и я хочу разобрать его на объект Java.Анализ XML с большим количеством подэлементов с помощью 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> 

Я работаю с JAXB для разбора XML-строку, которая не имеет «субэлементов», имеет только один элемент с его значениями на уровне errors.

Вопрос: Я хотел бы знать, как получить все Error элементы в Errors элемента, например, в список в 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; 
    } 
    ... 
} 

Обратите внимание, что есть только добытчик, и вы должны назвать его, если вы хотите, чтобы добавить элементы в список.

+0

Работает как очарование! – Artegon