[英]JAXB - Mapping XML file to java classes
我有简单的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;
}
}
当我加载数据时,类型的集合为null。 我知道我应该在第一个类中使用@XmlElementWrapper批注进行收集,但是它应该是什么样子? 这个注释看起来像@XmlElementWrapper(name =“ DataTypes”)吗? 但是在这种情况下,该名称将与根元素相同吗? 我应该如何正确地做到这一点?
预先感谢您的帮助
在当前映射的情况下,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
用于在表示集合中项目的元素周围添加分组元素。 如果您想进一步了解它可以做什么,请在我的博客上查看以下内容:
通过修改Blaises,您可以做得很好。 因此,有了它,您可以解析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
包装器不是有效的选项。
最简单的方法是创建一个xsd文件,在其中添加所有元素或类型,然后可以生成类文件。
要生成您将需要jaxb.jar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.