JAXB按元素解组列表元素

时间:2014-10-16 21:22:55

标签: java xml jaxb unmarshalling

我需要一些帮助来解组一些XML。特别是通过解组元素列表。请参阅以下示例:

@XmlRootElement(name="element")
public class Element
{
    private ArrayList<Element> children;

    public ArrayList<Element> getChildren() {
        return children;
    }

    @XmlElementWrapper(name = "children")
    @XmlElement(name = "element")
    public void setChildren(ArrayList<Element> children) {
        this.children = children;
    }
}

这将完美地解组列表,但我需要的是解组所有子元素元素并通过一些“addElement”方法添加它们:

    public void addElement(Element element) {
        children.add(element)
    }

这可以通过一些简单的注释 magic 来实现吗?当然,我可以遍历元素并调用“addElement”。

1 个答案:

答案 0 :(得分:1)

你可以简单地假装你的appender是一个二传手。

Example

@XmlRootElement(name = "element")
public class Element {
    private List<Element> children = new LinkedList<Element>();

    @XmlTransient
    public List<Element> getChildren() {
        return children;
    }

    @XmlElement(name = "element")
    public void setChild(Element child) {
        this.children.add(child);
    }

    private String value;

    @XmlAttribute
    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

每次遇到element元素时,JAXB都会调用setter。这会将unmarshalled元素添加到列表中。列表getter为@XmlTransient,以避免JAXB处理。

<强>更新

我忘了补充说这不会与@XmlWrapperElement一起工作,因为它需要一个集合属性。