SQL 服务器 XML 使用 xquery 查询
SQL server XML query with xquery
我试图在 sql 服务器上使用 xquery 获取下面的“行”数据。
DECLARE @xmlData XML
SET @xmlData = '
<Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<Header>
<WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdbABh3ZWJsb2duNDAAAA==</WorkContext>
</Header>
<Body>
<getReport xmlns:ns0="http://report_xml.org">
<return>
<pagekey>F1D96FB7ACFBA3BD5D5E77C5</pagekey>
<rapor>
<dataSet xmlns="http://report_xml.org/dataSet/201006">
<dataTable>
<id>ABC1</id>
<row>
<dim1>Paris</dim1>
<dim2>Societe</dim2>
<dim3>Car</dim3>
</row>
<row>
<dim1>Paris</dim1>
<dim2>Credit</dim2>
<dim3>Car</dim3>
</row>
</dataTable>
</dataSet>
</rapor>
</return>
</getReport>
</Body>
</Envelope>
'
当我使用下面的代码时,我可以获得“pagekey”值
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/pagekey')
或者我可以使用这个
到达“数据集”xml
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet')
但是,当我尝试进一步向下时,例如
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/dataTable/id')
or
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/dataTable/row')
查询 return 为空。
我错过了什么?
dataSet
元素引入了 默认命名空间 http://report_xml.org/dataSet/201006
。请注意,与 前缀命名空间 不同,后代元素从祖先 隐式 继承 默认命名空间 ,因此您应该使用访问 dataSet
:
中元素的相同前缀
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/DS:dataTable/DS:id')
or
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/DS:dataTable/DS:row')
我试图在 sql 服务器上使用 xquery 获取下面的“行”数据。
DECLARE @xmlData XML
SET @xmlData = '
<Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<Header>
<WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdbABh3ZWJsb2duNDAAAA==</WorkContext>
</Header>
<Body>
<getReport xmlns:ns0="http://report_xml.org">
<return>
<pagekey>F1D96FB7ACFBA3BD5D5E77C5</pagekey>
<rapor>
<dataSet xmlns="http://report_xml.org/dataSet/201006">
<dataTable>
<id>ABC1</id>
<row>
<dim1>Paris</dim1>
<dim2>Societe</dim2>
<dim3>Car</dim3>
</row>
<row>
<dim1>Paris</dim1>
<dim2>Credit</dim2>
<dim3>Car</dim3>
</row>
</dataTable>
</dataSet>
</rapor>
</return>
</getReport>
</Body>
</Envelope>
'
当我使用下面的代码时,我可以获得“pagekey”值
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/pagekey')
或者我可以使用这个
到达“数据集”xml; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet')
但是,当我尝试进一步向下时,例如
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/dataTable/id')
or
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/dataTable/row')
查询 return 为空。
我错过了什么?
dataSet
元素引入了 默认命名空间 http://report_xml.org/dataSet/201006
。请注意,与 前缀命名空间 不同,后代元素从祖先 隐式 继承 默认命名空间 ,因此您应该使用访问 dataSet
:
; WITH XMLNAMESPACES ('http://report_xml.org/dataSet/201006' AS DS)
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/DS:dataTable/DS:id')
or
select @xmlData.query('/Envelope/Body/getReport/return/rapor/DS:dataSet/DS:dataTable/DS:row')