解组xml架构选择元素以分隔列表

时间:2012-01-31 00:50:29

标签: java jaxb xsd unmarshalling choice

是否可以使用以下模式:

<xs:complexType name="GroupType">
    <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element type="PageType" name="Page" minOccurs="0" maxOccurs="unbounded"/>           
            <xs:element type="GroupType" name="Group" minOccurs="0" maxOccurs="unbounded"/>                
            <xs:element type="ResourcesType" name="Resources" minOccurs="0" maxOccurs="1"/>
        </xs:choice>
    </xs:sequence>
</xs:complexType>

..要以不同的元素类型在不同的列表中的方式进行解组? e.g:

public class GroupType {
    List<PageType> page;
    List<GroupType> group;
    ResourcesType resources;
    ...
}

JAXB的默认行为是将与choice匹配的所有元素组合到一个通用列表中。我不关心在编组时订购或重新创建确切的文档,因此更方便地组织数据而不是精确的副本。

1 个答案:

答案 0 :(得分:1)

从POJO开始,您可以按如下方式注释您的课程:

@XmlAccessorType(XmlAccessType.FIELD)
public class GroupType {
    @XmlElement(name="Page")
    List<PageType> page;

    @XmlElement(name="Group)
    List<GroupType> group;

    @XmlElement(name="Resources")
    ResourcesType resources;
    ...
}

如果要从XML模式生成类,则可以使用外部绑定文件指定您具有GroupType的预构建类

了解更多信息