jaxb 解析list元素
@XmlRootElement是人们习惯于与JAXB(JSR-222)一起使用的注释。 目的是将根元素与类唯一关联。 由于JAXB类映射到复杂类型,因此一个类有可能对应于多个根元素。 在这种情况下,无法使用
@XmlRootElement ,人们开始感到有些困惑。 在本文中,我将演示如何使用
@XmlElementDecl映射此用例。
XML模式
下面的XML模式包含三个根元素: customer , billing-address和shipping-address 。 customer元素具有匿名的复杂类型,而billing-address和shipping-address具有相同的命名类型( address-type )。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/customer"
xmlns="http://www.example.org/customer"
elementFormDefault="qualified">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element ref="billing-address"/>
<xs:element ref="shipping-address"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="address-type">
<xs:sequence>
<xs:element name="street" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="billing-address" type="address-type"/>
<xs:element name="shipping-address" type="address-type"/>
</xs:schema>
生成模型
下面是从XML模式生成的JAXB模型。 将JAXB批注添加到现有Java模型时,将应用相同的概念。
顾客
JAXB域类对应于复杂类型。 由于customer元素具有匿名复杂类型,因此Customer类具有@XmlRootElement批注。 这是因为只有一个XML元素可以与匿名类型相关联。
package org.example.customer;
import javax.xml.bind.annotation.*;
@XmlAcce