使用jaxb解析嵌套的相同名称元素

时间:2013-06-14 18:49:39

标签: java xml jaxb scorm

我已经搜索了很多解决方案但不幸的是我找不到任何可以解决我问题的方法。

我有一个巨大的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>

我们可以看到“item”中有几个“item”,每当我尝试回调这些项目时,我只会得到第一个“父”项目。

这是我的Item java类:

@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()时,我得到[]。 有什么帮助吗?

1 个答案:

答案 0 :(得分: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 ...


}