我试图将以下嵌套结构映射到列表。问题是<list>
可以嵌套。因此,顶级列表可以包含一个或多个其他列表,而这些列表又包含一些元素,例如我的示例中的<property>
:
<operator name="A2">
<list name="table">
<list>
<property name="A1" value="1" dataType="boolean"/>
<property name="b" value="1" dataType="boolean"/>
</list>
</list>
</operator>
<list>
也可以直接包含<property>
元素而无需进一步嵌套:
<operator name="A3">
<list name="xyz">
<property name="x" value="1.9" dataType="double"/>
<property name="y" value="0.2" dataType="double"/>
</list>
</operator>
我试图像这样映射:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "list")
public class List<T> {
@XmlAttribute(name="name")
public String name;
@XmlAnyElement
public T topLevelList;
public List() {}
}
但是,只有外部列表才会被映射。这是第一个XML块的打印toString
调用的相关部分:
Operator{list=List{name='table', topLevelList=[list: null]}}
如何使用JAXB映射此类结构?
答案 0 :(得分:1)
1)那里不需要@XmlRootElement。尝试将此注释仅存储在示例中的运算符之类的实际根元素中。
2)如果您确定List应该包含List,则不能使用generic。只需创建两个独立的字段。
可能的解决方案示例:
@XmlAccessorType(XmlAccessType.FIELD)
public class List {
@XmlAttribute(name="name")
public String name;
@XmlElement(name = "list")
public List nestedList;
@XmlElement(name = "property")
public List<Property> properties;
...
}