第 35 章 使用复杂类型
摘要
复杂的类型可以包含多个元素,它们可以包含属性。它们映射到可保存由类型定义表示数据的 Java 类。通常,映射是到一个带有代表元素和内容模型属性的一组属性的 bean。
35.1. 基本复杂类型映射 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
XML 架构复杂类型定义包含比简单类型更复杂信息的构造。最简单的复杂类型定义一个带有属性的空元素。更复杂的类型由一组元素组成。
默认情况下,XML 架构复杂类型映射到 Java 类,其 member 变量代表 XML Schema 定义中列出的每个元素和属性。类有 setters 和 getters,用于每个成员变量。
在 XML 架构中定义 复制链接链接已复制到粘贴板!
XML 架构复杂类型使用 complexType
元素定义。complexType
元素嵌套用于定义数据结构的其余元素。它可以显示为指定类型定义的父元素,也可以是匿名定义 元素
中存储的信息结构的子元素。当使用 complexType
元素来定义命名类型时,它需要使用 name
属性。name
属性指定引用类型的唯一标识符。
包含一个或多个元素的复杂类型定义具有 表 35.1 “在复杂类型中定义 Elements Appear 的元素” 中描述的子元素之一。这些元素决定了在类型的实例中如何显示指定的元素。
元素 | 描述 |
---|---|
| 作为复杂类型的一部分定义的所有元素都必须显示在类型的实例中。但是,它们可能会以任何顺序出现。 |
| 只有定义为复杂类型一部分的元素之一才能显示在类型的实例中。 |
| 作为复杂类型的一部分定义的所有元素都必须显示在类型的实例中,它们还必须按照类型定义中指定的顺序显示。 |
如果复杂类型定义只使用属性,则不需要 表 35.1 “在复杂类型中定义 Elements Appear 的元素” 中描述的元素之一。
在决定如何显示元素后,您可以通过向定义中添加一个或多个 元素元素
来定义元素。
例 35.1 “XML 架构复杂类型” 显示 XML 架构中的复杂类型定义。
例 35.1. XML 架构复杂类型
映射到 Java 复制链接链接已复制到粘贴板!
XML 架构复杂类型映射到 Java 类。复杂类型定义中的每个元素都映射到 Java 类中的 member 变量。也会为复杂类型中的每个元素生成 getter 和 setter 方法。
所有生成的 Java 类都使用 @XmlType
注释进行解码。如果映射用于命名复杂类型,则注解 名称
将设置为 complexType
元素的 name
属性的值。如果复杂类型定义为元素定义的一部分,则 @XmlType
注释的 name
属性的值是 元素的
name
属性的值。
如 “使用 in-line 类型进行元素映射的 Java 映射”一节 所述,如果为定义为元素定义的一部分的复杂类型生成了 @XmlRootElement
注释,则生成的类与 @XmlRootElement 注释分离。
为了为运行时提供指示 XML 架构复杂类型元素的指南,代码生成器会更改用于分离类及其成员变量的注解。
- 所有复杂类型
所有复杂的类型都使用
all
元素定义。它们被标注如下:-
@XmlType
注释的propOrder
属性为空。 -
每个元素使用
@XmlElement
注释进行解码。 @XmlElement
注释的必要
属性设为true
。例 35.2 “All Complex Type 的映射” 显示具有两个元素的所有复杂类型的映射。
例 35.2. All Complex Type 的映射
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
- 选择复杂类型
使用
choice
元素定义选择复杂类型。它们被标注如下:-
@XmlType
注释的propOrder
属性按照它们出现在 XML 架构定义中的顺序列出元素的名称。 没有成员变量都会被注解。
例 35.3 “选择复杂类型的映射” 显示具有两个元素的所选复杂类型的映射。
例 35.3. 选择复杂类型的映射
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
- 序列复杂类型
使用
sequence
元素定义一系列复杂类型。它被注解如下:-
@XmlType
注释的propOrder
属性按照它们出现在 XML 架构定义中的顺序列出元素的名称。 -
每个元素使用
@XmlElement
注释进行解码。 @XmlElement
注释的必要
属性设为true
。例 35.4 “序列复杂类型的映射” 显示 例 35.1 “XML 架构复杂类型” 中定义的复杂类型的映射。
例 35.4. 序列复杂类型的映射
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-