我需要一些帮助来解组一些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”。
答案 0 :(得分:1)
你可以简单地假装你的appender是一个二传手。
@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
一起工作,因为它需要一个集合属性。