搜索

35.5.5. 根据序列的出现限制

download PDF

概述

默认情况下,序列 元素的内容只能在复杂类型的实例中出现一次。您可以使用 minOccurs 属性及其 maxOccurs 属性来更改 序列 元素定义的元素序列的次数。您可以使用这些属性,可以指定序列类型在复杂类型的实例中可以为零到无限次数。

使用 XML Schema

minOccurs 属性指定在定义的复杂类型的实例中必须进行序列的最小次数。其值可以是任意正整数。将 minOccurs 属性设置为 0 指定序列不需要出现在复杂类型的实例中。

maxOccurs 属性指定在定义的复杂类型的实例中可以进行序列的上限。其值可以是任意非零、正整数或未绑定的 。将 maxOccurs 属性设置为 unbounded 指定序列可能会显示无限次。

例 35.20 “使用 Occurrence 限制序列” 显示序列类型 CultureInfo 的定义,以及顺序出现的限制。序列可以重复 0 到 2 次。

例 35.20. 使用 Occurrence 限制序列

<complexType name="CultureInfo">
  <sequence minOccurs="0" maxOccurs="2">
    <element name="Name" type="string"/>
    <element name="Lcid" type="int"/>
  </sequence>
</complexType>

映射到 Java

与单个实例序列不同,XML Schema 序列可以使用单个成员变量映射到 Java 类。这个单一成员变量是一个 List<T > 对象,它保存多个顺序发生的所有数据。例如,如果 例 35.20 “使用 Occurrence 限制序列” 中定义的序列发生两次,则列表会有四个项目。

Java 类的成员变量的名称通过串联 member 元素的名称来派生。元素名称由 分隔,变量名称的第一个字母转换为小写。例如,从 例 35.20 “使用 Occurrence 限制序列” 生成的成员变量名为 nameAndLcid

存储在列表中的对象类型取决于成员元素的类型。例如:

  • 如果成员元素是相同类型,生成的列表将包含 JAXBElement<T> 对象。JAXBElement<T&gt; 对象的基础类型由 member 元素类型的普通映射决定。
  • 如果成员元素是不同类型的,且其 Java 表示实施了通用接口,则列表将包含常见接口的对象。
  • 如果成员元素是不同类型的,其 Java 表示扩展通用基本类,则列表将包含常见基本类的对象。
  • 如果没有满足其他条件,该列表将包含对象 对象

生成的 Java 类仅具有 member 变量的 getter 方法。getter 方法返回对 live 列表的引用。对返回列表所做的任何修改对实际对象的影响。

Java 类使用 @XmlType 注释进行解码。注解的 name 属性设置为 XML Schema 定义中 parent 元素的 name 属性的值。该注解的 propOrder 属性包含代表序列中元素的单个成员变量。

代表序列中元素的 member 变量通过 @XmlElements 注释进行解码。@XmlElements 注释包含以逗号分隔的 @XmlElement 注释列表。列表有一个 @XmlElement 注释,适用于类型 XML Schema 定义中定义的每个 member 元素。列表中 @XmlElement 注解的 name 属性设为 XML Schema 元素 元素的 name 属性的值,以及它们的 type 属性设为由 XML Schema 元素类型映射生成的 Java 类。

例 35.21 “Java 代表带有 Occurrence Constraint 的序列” 显示 例 35.20 “使用 Occurrence 限制序列” 中定义的 XML Schema 序列的 Java 映射。

例 35.21. Java 代表带有 Occurrence Constraint 的序列

@XmlType(name = "CultureInfo", propOrder = {
    "nameAndLcid"
})
public class CultureInfo {

    @XmlElements({
        @XmlElement(name = "Name", type = String.class),
        @XmlElement(name = "Lcid", type = Integer.class)
    })
    protected List<Serializable> nameAndLcid;

    public List<Serializable> getNameAndLcid() {
        if (nameAndLcid == null) {
            nameAndLcid = new ArrayList<Serializable>();
        }
        return this.nameAndLcid;
    }

}

minOccurs 设为 0

如果只指定 minOccurs 元素,其值为 0, 则代码生成器会生成 Java 类,就像未设置 minOccurs 属性一样。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.