我需要将XML字符串解组到项目中已经存在的类中,但是我不知道如何将XML的特定部分解组到对象列表中。让我用一些代码解释一下:
我有这个XML:
<user>
<id>123</id>
<name>John Doe</name>
<vaddresses>
<address>
<street>Street XYZ</street>
</address>
<address>
<street>Street ABC</street>
</address>
</vaddresses>
</user>
我有这些课程:
用户
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {"id", "name", "addresses"})
public class User {
@XmlElement
private int id;
@XmlElement
private String name;
@XmlElement
private List<Address> addresses;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
地址
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Address", propOrder = {"street"})
public class Address {
@XmlElement
private String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
当我尝试将XML解组到这些类中时,字段id和name的处理正确,但是地址却没有相同:
输出量
User:
Id: 123
Nome: John Doe
Addresses: null
我该如何解决这个问题?我可以使用一些JAXB注释吗?如何?还是我需要创建某种类型的XmlAdapter? (我已经尝试过了,但是没有成功...)
最佳答案
您可以利用@XmlElementWrapper
在集合周围添加分组元素:
@XmlElementWrapper(name="vaddresses")
@XmlElement(name="address")
private List<Address> addresses;
注意
您添加的注释超出了必要。 JAXB是例外配置,因此您只需注释要XML表示形式与默认设置不同的位置。
http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html