调用具有 CDATA 属性的 WebService 后,我有以下 XML 响应。
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RunQueryResponse xmlns="BlnSocket">
<RunQueryResult>
<![CDATA[<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="VFPData" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="VFPData">
<xs:complexType>
<xs:sequence>
<xs:element name="x1" type="xs:string" minOccurs="0" />
<xs:element name="x2" type="xs:string" minOccurs="0" />
<xs:element name="x3" type="xs:string" minOccurs="0" />
<xs:element name="x4" type="xs:string" minOccurs="0" />
<xs:element name="x5" type="xs:string" minOccurs="0" />
<xs:element name="x6" type="xs:string" minOccurs="0" />
<xs:element name="x7" type="xs:string" minOccurs="0" />
<xs:element name="x7" type="xs:string" minOccurs="0" />
<xs:element name="x9" type="xs:string" minOccurs="0" />
<xs:element name="x10" type="xs:string" minOccurs="0" />
<xs:element name="x11" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<VFPData>
<x1>abc</x1>
<x2>abc</x2>
<x3>abc</x3>
<x4>abc</x4>
<x5>abc</x5>
<x6>abc</x6>
<x7>abc</x7>
<x8>abc</x8>
<x9>abc</x9>
<x10>abc</x10>
<x11>abc</x11>
</VFPData>
</NewDataSet>]]>
</RunQueryResult>
</RunQueryResponse>
</soap:Body>
</soap:Envelope>
我尝试使用下面的查询解析它,但它没有返回任何值。
我需要特别注意 CDATA 属性吗?运行以下查询时,它不会返回任何数据,也不会引发任何错误。
我应该如何更改它以便我可以查询 VFPData 数据集的所有实例?
SELECT xmlt.*
FROM XMLTABLE(XMLNAMESPACES('http://www.w3.org/2003/05/soap-envelope' as "soap",
'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
'http://www.w3.org/2001/XMLSchema' as "xsd",
'http://www.w3.org/2001/XMLSchema' as "xs",
'urn:schemas-microsoft-com:xml-msdata' as "msdata"
),'/soap:Envelope/soap:Body/RunQueryResponse/RunQueryResult/NewDataSet/VFPData'
PASSING xmltype(
'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RunQueryResponse xmlns="BlnSocket">
<RunQueryResult><![CDATA[<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="VFPData" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="VFPData">
<xs:complexType>
<xs:sequence>
<xs:element name="x1" type="xs:string" minOccurs="0" />
<xs:element name="x2" type="xs:string" minOccurs="0" />
<xs:element name="x3" type="xs:string" minOccurs="0" />
<xs:element name="x4" type="xs:string" minOccurs="0" />
<xs:element name="x5" type="xs:string" minOccurs="0" />
<xs:element name="x6" type="xs:string" minOccurs="0" />
<xs:element name="x7" type="xs:string" minOccurs="0" />
<xs:element name="x8" type="xs:string" minOccurs="0" />
<xs:element name="x9" type="xs:string" minOccurs="0" />
<xs:element name="x10" type="xs:string" minOccurs="0" />
<xs:element name="x11" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<VFPData>
<x1>abc1</x1>
<x3>abc1</x3>
<x4>abc1</x4>
<x5>abc1</x5>
<x6>abc1</x6>
<x9>abc1</x9>
<x10>abc1</x10>
</VFPData>
<VFPData>
<x1>abc2</x1>
<x3>abc2</x3>
<x4>abc2</x4>
<x5>abc2</x5>
<x6>abc2</x6>
<x9>abc2</x9>
<x10>abc2</x10>
</VFPData>
</NewDataSet>]]></RunQueryResult>
</RunQueryResponse>
</soap:Body>
</soap:Envelope>')
COLUMNS x1 VARCHAR2(50) PATH 'x1') xmlt;