2013-06-14 3 views
0

해결 방법을 많이 찾았지만 불행히도 문제를 해결할 수있는 코드를 찾지 못했습니다.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> 

우리는이 "항목"과 여러 "항목"의입니다 볼 수 있듯이 내가 첫 번째 "부모"항목을 얻을 항목을 콜백을 시도 할 때마다.

여기에 내 항목 자바 클래스입니다 : 예를 들어

@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

Item 클래스보다 @XmlAccessorType (XmlAccessType.FIELD)을 시도 했습니까? – dk14

+1

예. 그것은 효과가 있었다. 고마워. – Deksterious