文章目录
- [第九章 将对象映射到 XML - 控制集合属性的映射形式](#第九章 将对象映射到 XML - 控制集合属性的映射形式)
- 控制集合属性的映射形式
- 指定数组属性的映射形式
第九章 将对象映射到 XML - 控制集合属性的映射形式
控制集合属性的映射形式
要控制集合属性的 XML
映射的形式,请设置该属性的 XMLPROJECTION
参数,如下所示:
XMLPROJECTION
对集合属性的影响
Value of XMLPROJECTION | Effect on Collection Properties |
---|---|
"WRAPPED " |
该属性被映射为具有子元素的元素;每个子元素对应于集合中的一个项目。这是集合属性的默认值。 |
"ELEMENT " |
集合中的每个项目都被映射为一个元素,而不被包装在父属性中。 |
"NONE " |
该属性不会投影为 XML 。 |
"ATTRIBUTE ", "XMLATTRIBUTE ", or "CONTENT " |
编译时错误。 |
以下部分显示了具有数据类型列表或数组属性的示例。对于对象集合,映射元素可以递归地具有进一步的结构,具体取决于这些对象的 XML
映射。
指定列表属性的映射形式
以下类定义使用"WRAPPED
"和"ELEMENT
"值的集合属性:
java
Class xmlproj.DataTypeColls Extends (%RegisteredObject, %XML.Adaptor)
{
Property Collection1 As list Of %String;
Property Collection2 As list Of %String (XMLPROJECTION="wrapped");
Property Collection3 As list Of %String (XMLPROJECTION="element");
}
下面显示了此类实例的 XML
表示形式的示例:
xml
<?xml version="1.0" encoding="UTF-8"?>
<DataTypeColls>
<Collection1>
<Collection1Item>list item 1</Collection1Item>
<Collection1Item>list item 2</Collection1Item>
</Collection1>
<Collection2>
<Collection2Item>list item 1</Collection2Item>
<Collection2Item>list item 2</Collection2Item>
</Collection2>
<Collection3>list item 1</Collection3>
<Collection3>list item 2</Collection3>
</DataTypeColls>
对于使用"ELEMENT
"的 Collection3
属性,XML
映射忽略该属性的列表性质,而是将每个列表项视为该类的单独属性。
指定数组属性的映射形式
对于数组,每个数组项都有一个值和一个键,这两条信息都必须用 XML 表示。键始终被映射为元素内的 XML
属性。考虑下面的类:
java
Class xmlproj.DataTypeArray Extends (%RegisteredObject, %XML.Adaptor)
{
Property ArrayProp As array Of %String;
}
下面显示了此类实例的默认 XML
表示形式的示例:
xml
<?xml version="1.0" encoding="UTF-8"?>
<DataTypeArray>
<ArrayProp>
<ArrayPropItem ArrayPropKey="1">apples</ArrayPropItem>
<ArrayPropItem ArrayPropKey="2">bananas</ArrayPropItem>
<ArrayPropItem ArrayPropKey="3">chocolate</ArrayPropItem>
</ArrayProp>
</DataTypeArray>
如果将 XMLPROJECTION
指定为"ELEMENT
",则 XML
投影如下所示:
xml
<?xml version="1.0" encoding="UTF-8"?>
<DataTypeArray>
<ArrayProp ArrayPropKey="1">apples</ArrayProp>
<ArrayProp ArrayPropKey="2">bananas</ArrayProp>
<ArrayProp ArrayPropKey="3">chocolate</ArrayProp>
</DataTypeArray>