第五章 将对象映射到 XML - 指定映射 XML 文档的格式选项
指定映射 XML
文档的格式选项
XML
文档有两种基本格式:文字格式和编码格式(SOAP
编码格式)。有关这些格式的示例,请参阅 XML
工具简介。当从启用 XML 的类导出数据或将数据导入到启用 XML
的类时,可以指定其中一种格式。
当将 %XML.Adaptor
添加到类并编译它时, IRIS
会将附加代码写入生成的例程。默认情况下,此附加代码支持这两种格式。如果只需要一种格式,则可以抑制其他格式并减少生成的代码量。为此,请为该类指定 XMLFORMAT
参数。使用以下值之一(不区分大小写):
-
"LITERAL"
— 该类仅支持文字格式。 -
"ENCODED"
— 该类仅支持编码格式。 (它支持SOAP 1.1
和SOAP 1.2
版本)。 -
Null
(默认值)— 该类支持文字格式和编码格式。
控制简单属性的映射形式
简单属性是类型为数据类型类或未声明类型的属性(任何没有指定类型的属性都假定为字符串)。
要控制简单属性的 XML
映射的形式,请设置该属性的 XMLPROJECTION
参数。使用以下值之一(不区分大小写):
XMLPROJECTION 的价值 |
对非集合属性的影响 |
---|---|
"ELEMENT" |
该属性被映射为一个元素。这是非集合属性的默认值。 |
"ATTRIBUTE" |
该属性被映射为属性。 |
"XMLATTRIBUTE" |
该属性被映射为带有前缀 xml 的属性。 |
"WRAPPED" |
该属性被映射为具有子元素的元素;子元素的名称基于属性的数据类型。 |
"CONTENT" |
该属性被映射为该类的主要内容(即,该属性的内容是在没有任何封闭元素的情况下编写的)。在任何类中,都不能为多个属性指定该值。 |
"NONE" |
该属性不会映射为 XML 。 |
XMLPROJECTION
参数还接受值“COLLECTION”
或“ELEMENTREF”
,但这些值已被弃用并且未在此处记录。
基本 XMLPROJECTION
变体
以下类定义了使用除“CONTENT”
之外的 XMLPROJECTION
的所有变体的简单属性:
Class xmlproj.SimpleProps Extends (%RegisteredObject, %XML.Adaptor)
{
Property Simple1 As %String (XMLPROJECTION="attribute");
Property Simple2 As %String (XMLPROJECTION="xmlattribute");
Property Simple3 As %String;
Property Simple4 As %String (XMLPROJECTION="element");
Property Simple5 As %String (XMLPROJECTION="wrapped");
Property Simple6 As %String (XMLPROJECTION="none");
}
下面显示了此类实例的 XML
表示形式的示例:
<SimpleProps Simple1="The quick" xml:Simple2="brown fox">
<Simple3>jumps</Simple3>
<Simple4>over</Simple4>
<Simple5>
<string>the lazy</string>
</Simple5>
</SimpleProps>
将属性映射为内容
“CONTENT”
值使能够将类映射为具有一些文本内容和可能的一些属性但没有子元素的简单元素。
Class xmlproj.SimpleContentProp Extends (%RegisteredObject, %XML.Adaptor)
{
Property Simple1 As %String(XMLPROJECTION = "content");
Property Simple2 As %String(XMLPROJECTION = "attribute");
Property Simple3 As %String(XMLPROJECTION = "element");
}
当导出此类的实例时:
- 如果标有
“CONTENT”
的属性有值,则该值将导出为类的内容。任何映射为属性的属性也会被导出。其他属性将被忽略。例如:
<SimpleContentProp Simple2="other value">The quick brown fox jumps over the lazy dog</SimpleContentProp>
- 如果标有
“CONTENT”
的属性为null
,则该属性将被忽略,并且其他属性均按照其XMLPROJECTION
值指定的方式导出。例如:
<SimpleContentProp Simple2="other value">
<Simple3>yet another value</Simple3>
</SimpleContentProp>
对于任何类中的多个属性,不能将 XMLPROJECTION
指定为“CONTENT”
。此外,只能将此值用于包含简单文字值的属性,而不是集合或其他类型的对象。