2013-06-14 4 views
0

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

У меня огромный xml для платформы электронного обучения. в этом xml у меня есть вложенный элемент с тем же именем.

, такие как:

<organizations> 
<organization identifier="" structure=""> 
    <title>TITLE</title> 
    <item identifier="ITEM_0" identifierref="55555555" image="" isvisible="1" pagetype="" parameters=""> 
    <title>Welcome</title> 
    </item> 
    <item identifier="ITEM_456" identifierref="6666666" image="" isvisible="1" pagetype="" parameters=""> 
    <title>TITLE1</title> 
    <item identifier="ITEM_457" identifierref="77777777" image="" isvisible="1" pagetype="" parameters=""> 
     <title>TITLE2</title> 
     <item identifier="ITEM_219" identifierref="88888888" image="" isvisible="1" pagetype="" parameters=""> 
     <title>TITLE3</title> 
     </item> 
     <item identifier="ITEM_73" identifierref="99999999" image="" isvisible="1" pagetype="" parameters=""> 
     <title>TITLE4</title> 
     </item> 
     <item identifier="ITEM_74" identifierref="000000000" image="" isvisible="1" pagetype="" parameters=""> 
     <title>TITLE5</title> 
     </item> </item> 

Как мы можем видеть несколько «пункт» s в «пункта» и всякий раз, когда я пытаюсь обратного вызова пунктов я получаю только первый «родительский» элемент.

Вот мой класс Java Item:

@XmlElementRef(name="item") 
public List<Item> items = new ArrayList<Item>(); 
@XmlAttribute(name = "identifier", required = true) 
@XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
@XmlSchemaType(name = "NCName") 
protected String identifier; 
@XmlAttribute(name = "identifierref", required = false) 
@XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
@XmlSchemaType(name = "NCName") 
protected String identifierref; 
@XmlAttribute(name = "isvisible", required = false) 
protected boolean isvisible; 

Например, всякий раз, когда я называю название любого из дочерних элементов я всегда основной родительским названием «Добро пожаловать!» это означает, что я не могу попасть в рекурсивный. Хотя мой метод полностью прав после долгого времени отладки ... всякий раз, когда я вызываю getItems(), я получаю []. любая помощь?

ответ

0

Может быть, это может помочь: JAXB endless data structure, recursive binding?

@XmlAccessorType(XmlAccessType.FIELD) // add this to avoid FIELD/METHOD conflicts 
public class Item { 
    private int id; 
    private String name; 

    @XmlElement(name="item")//There is no need for XmlElementRef 
    private List<Item> items = new ArrayList<Item>(); 

    @XmlAttribute(name = "identifier", required = true) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    @XmlSchemaType(name = "NCName") 
    protected String identifier; 
    @XmlAttribute(name = "identifierref", required = false) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    @XmlSchemaType(name = "NCName") 
    protected String identifierref; 
    @XmlAttribute(name = "isvisible", required = false) 
    protected boolean isvisible; 

    //I think here is accessors 
    List[Items] getItems ... 


} 
+0

Спасибо, но я пытался с большим количеством вариаций аннотаций до частного Списка элементов = новый ArrayList (); , ничего не помогло! включая ваше предложение – Deksterious

+0

Пробовал ли вы @XmlAccessorType (XmlAccessType.FIELD) перед классом Item? – dk14

+1

есть. это сработало. Большое спасибо. – Deksterious

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