我有简单的XML文件。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DataTypes>
<Type name="type_integer" type="integer" />
<Type name="valid_string" type="string" />
</DataTypes>
我创建了两个类来将此文件映射到这些类。其中第一个应该对应DataTypes标签。我按如下方式定义了这个类:
@XmlRootElement(name = "DataTypes")
public class DataTypes {
private List<DataType> types;
public List<DataType> getTypes() {
return types;
}
public void setTypes(List<DataType> types) {
this.types = types;
}
}
第二个类对应于Type标签。我按如下方式定义了这个类:
@XmlAccessorType(XmlAccessType.FIELD)
public class DataType {
@XmlAttribute
private String name;
@XmlAttribute
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
当我加载数据时,类型集合为空。我知道我应该在第一个类中使用@XmlElementWrapper注释进行集合,但它应该如何?这个注释应该看起来像@XmlElementWrapper(name =“DataTypes”)吗?但在这种情况下,此名称将与根元素相同? 我该如何正确地做到这一点?
提前感谢您的帮助
答案 0 :(得分:1)
使用当前映射,JAXB需要以下XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DataTypes>
<types name="type_integer" type="integer" />
<types name="valid_string" type="string" />
</DataTypes>
您只需要在DataTypes
类中执行以下操作,以指定应使用Type
元素,而不是从属性名称派生的默认types
。
@XmlElement(name="Type")
public List<DataType> getTypes() {
return types;
}
其他信息可以在我的博客上找到:
关于@XmlElementWrapper
@XmlElementWrapper
用于在表示集合中项目的元素周围添加分组元素。如果您想了解更多信息,请查看我的博客中的以下内容:
答案 1 :(得分:1)
通过Blaise修改,你做得非常好。因此,使用它,您可以解析您的xml并获取您的类型 - 列表。
@XmlElement(name="Type")
public List<DataType> getTypes() {
return types;
}
XmlElementWrapper
元素会生成无类别标记。所以你可以写
@XmlElementWrapper(name = "TypesCol")
@XmlElement(name="Type")
public List<DataType> getTypes() {
return types;
}
您可以像这样处理XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DataTypes>
<TypesCol>
<Type name="type_integer" type="integer" />
<Type name="valid_string" type="string" />
</TypesCol>
</DataTypes>
没有TypesCol
的课程。但是您需要引用根类DataTypes
。因此DataTypes
的包装器不是一个有效的选项。
答案 2 :(得分:-2)
简单的方法是创建一个xsd文件,在其中添加所有元素或类型,然后就可以生成类文件。
要生成,您需要jaxb.jar