gpt4 book ai didi

java - 使用 JAXB 映射通用的嵌套 XML 数据结构

转载 作者:行者123 更新时间:2023-11-30 06:33:00 25 4
gpt4 key购买 nike

我正在尝试将以下嵌套结构映射到列表。问题是<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() {}
}

但是,只有外部列表被映射。这是打印的 toString 中的相关分数调用第一个 XML block :

Operator{list=List{name='table', topLevelList=[list: null]}}

如何使用 JAXB 映射这样的结构?

最佳答案

1) @XmlRootElement 在那里不是必需的。尝试仅将此注释放在真正的根元素中,例如示例中的 Operator。

2) 如果您确定 List 应完全包含 List,则不能使用泛型。只需创建两个单独的字段即可。

可能的解决方案示例:

@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;
...
}

关于java - 使用 JAXB 映射通用的嵌套 XML 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45707739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com