文章目录
- 第四十四章 在 SOAP 消息中使用数据集 - 控制数据集格式
- 控制数据集格式
第四十四章 在 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。