我想拥有以下XML
<doc>
<items>
<item />
<item />
<item />
</items>
<things>
<thing />
<thing />
<thing />
</things>
</doc>
架构类似于
<schema>
<element name="doc">
<complexType>
<all>
<element name="items" minOccurs="1">
<complexType>
<sequence>
<element name="item" minoccurs="0" maxoccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="things" minOccurs="1">
<complexType>
<sequence>
<element name="thing" minoccurs="0" maxoccurs="unbounded" />
</sequence>
</complexType>
</element>
</all>
/<complexType>
</element>
</schema>
现在使用JAXB创建一个名为Doc的类,它将具有一个具有Item的Items类型。因此,我必须添加第一个元素。
Doc doc = new Doc();
Items items = new Items();
items.getItem().add(new Item());
doc.setItems(items);
我希望能够做到以下几点:
Doc doc = new Doc();
doc.getItems().add(new Item());
甚至更好:
Doc doc = new Doc();
doc.addItem(new Item());
无论如何通过JAXB绑定做到这一点?
答案 0 :(得分:4)
根据comment by nsfyn55,似乎没有办法用绑定做到这一点。
但是,如果你使用JAXB annoations,你可以这样做:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Doc {
@XmlElementWrapper(name = "items")
@XmlElement(name="item")
List<Item> items = new ArrayList<Item>();
public void addItem(Item item) {
this.items.add(item);
}
// ...
}
答案 1 :(得分:0)
您需要包装标签。它将元素定义为分组序列,而不仅仅是一堆任意元素。
答案 2 :(得分:0)
我希望能够做到以下几点:
Doc doc = new Doc();
doc.getItems()。add(new Item());
我相信你可以(至少在JAXB 2.1中)为getItems()生成的代码检查null成员集合,并在返回之前根据需要创建它。所以它总是返回一个“实时”列表对象。