2013-09-27 5 views
2

Я должен разобрать XML в объектах Java и XML содержит развернутый список объектов, который выглядит как:JAXB распаковать развернутый список объектов

<main> 
    <mainPropA>Main Property A</mainPropA> 
    <mainPropB>Main Property B</mainPropB> 
    <elements> 
     <propA>Property A1</propA> 
     <propB>Property B1</propB> 
     <propA>Property A2</propA> 
     <propB>Property B2</propB> 
     ... 
    </elements> 
</main> 

Так что в этом случае у меня есть Java-код, который должен выглядеть :

public class MainClass { 
    private String mainPropA; 
    private String mainPropB; 
    private List<Element> elements; 
} 

public class Element { 
    private String propA; 
    private String propB; 
} 

Не могу понять, как это сделать.

Я пробовал следующее сопоставление и могу получить первый элемент, который будет заполняться в списке, но не другие.

@XmlRootElement(name = "main") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class MainClass { 
    private String mainPropA; 
    private String mainPropB; 
    @XmlElement(name = "elements") 
    private List<Element> elements; 
} 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Element { 
    private String propA; 
    private String propB; 
} 

Я пробовал различные комбинации аннотаций, но выше аннотации получила мне ближе видеть нечто иное, чем нуль.

Есть ли способ заставить это работать?

Я не могу изменить XML, который приходит ко мне, так что это не так.

Я использую JAXB, но никак не привязан к нему. Также используйте Java 7, если это имеет значение.

ответ

0

попробовать это

@XmlRootElement(name = "main") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class MainClass { 
     @XmlElement(name = "mainPropA") 
     private String title; 
     @XmlElement(name = "mainPropB") 
     private String author; 
     private Elements elements; 

     @XmlAccessorType(XmlAccessType.FIELD) 
     static class Elements { 
      List<String> propA; 
      List<String> propB; 
     } 
    } 
} 
+0

Хмм .. попробовал это, и она работает с моим образцом XML. Мне нужно было бы создать вспомогательные методы, чтобы вытащить объект из элементов списка (Элемент 1 состоит из propA.get (0) и propB.get (0)), но это выполнимо. Я беспокоюсь, когда у меня есть несбалансированные свойства элемента. Таким образом, у меня есть Недвижимость 1a Недвижимость 2a Недвижимость 2b. Первый элемент не имеет свойства B, поэтому второй элемент будет иметь propB как первый в списке. Я не знаю, как обойти это. – Philip

+0

Да, разделить задачу 1) извлечь информацию 2) интерпретировать ее –

+0

Это работает до тех пор, пока у меня есть четное количество свойств, поэтому отмечаю это как ответ. Если третья сторона вернется и говорит, что они не гарантируют, что каждая собственность всегда будет там, тогда что-то еще нужно будет сделать. – Philip

Смежные вопросы