繁体   English   中英

JAXB-将XML文件映射到Java类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM