第四十四章 在 SOAP 消息中使用数据集 - 控制数据集格式
控制数据集格式
默认情况下,数据集以 Microsoft DiffGram 格式编写,并在其前面加上 XML 架构。以下显示了一个示例:
<SOAP-ENV:Body>
<Get0Response xmlns="https://www.myapp.org">
<Get0Result>
<s:schema id="DefaultDataSet" xmlns=""
attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns:s="https://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<s:element name="DefaultDataSet" msdata:IsDataSet="true">
<s:complexType>
<s:choice maxOccurs="unbounded">
<s:element name="GetPeople">
<s:complexType>
<s:sequence>
<s:element name="Name" type="s:string" minOccurs="0" />
<s:element name="DOB" type="s:date" minOccurs="0" />
</s:sequence>
</s:complexType>
</s:element>
</s:choice>
</s:complexType>
</s:element>
</s:schema>
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DefaultDataSet xmlns="">
<GetPeople diffgr:id="GetPeople1" msdata:rowOrder="0">
<Name>Quine,Howard Z.</Name>
<DOB>1965-11-29</DOB>
</GetPeople>
...
</DefaultDataSet>
</diffgr:diffgram>
</Get0Result>
</Get0Response>
</SOAP-ENV:Body>
%XML.DataSet 类提供以下选项来控制此格式:
DATAONLY参数和DiffGram属性控制输出是否为DiffGram格式。默认情况下,输出为DiffGram格式,如上所示。如果将%XML.DataSet子类化并将DATAONLY设置为1,或者将DiffGram设置为0,则输出将不是DiffGram格式。XML数据集的主体如下所示:
<SOAP-ENV:Body>
<Get0Response xmlns="https://www.myapp.org">
<Get0Result>
<GetPeople xmlns="">
<Name>Quine,Howard Z.</Name>
<DOB>1965-11-29</DOB>
</GetPeople>
<GetPeople xmlns="">
...
</Get0Result>
</Get0Response>
</SOAP-ENV:Body>
与 DiffGram 格式相比,请注意默认情况下不输出架构,并且输出不包含 <diffgram> 元素。
NeedSchema属性控制输出是否包含XML架构。如果使用DiffGram格式,则默认输出架构;如果不使用DiffGram格式,则默认不输出架构。要强制输出架构,请将NeedSchema设置为1;要禁止输出架构,请将其设置为0。- 如果使用
DiffGram格式,则WriteEmptyDiffgram属性在数据集没有行的情况下控制<diffgram>元素的内容。默认情况下(或者如果WriteEmptyDiffgram等于0),<diffgram>元素包含一个空元素,如下所示:
...
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DefaultDataSet xmlns="">
</DefaultDataSet>
</diffgr:diffgram>
...
相反,如果 WriteEmptyDiffgram 等于1,则 <diffgram> 元素不包含任何内容:
...
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
</diffgr:diffgram>
...
如果没有使用 DiffGram 格式,则此属性无效。
- 如果使用
DiffGram格式,DataSetName属性将控制<diffgram>元素中元素的名称。默认情况下,此元素名为<DefaultDataSet>,如上例所示。如果未使用DiffGram格式,则此属性无效。
%XML.DataSet 还提供了 CaseSensitive 属性,该属性与同名的 Microsoft 数据集属性相对应。出于兼容性原因,默认值为 false。