[英]SQL Server Xml query with cascading namespaces
我如何 select 从 xml 下面的“pagekey”的值与 SQL 上的 Z97078840A07401CCB28? 我尝试使用命名空间的节点,但找不到正确的语法。
谢谢,
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO03ZWJsb2dpYy5hcHAuU0JNLVJhcG9yV1MAAADWAAAAI3dlYmxvZ2ljLndvcmthcmVhL0cmluZ1dvcmtDb250ZXh0ABIyMDIwLE4LjE0MjIuNDAAAA==</WorkContext>
</S:Header>
<S:Body>
<ns0:getReportOutputResponse xmlns:ns0="http://report_xml.org">
<return>
<pagekey>i6161140E964FF7A072CD2E3F2BB9C0</pagekey>
<report><?xml version="1.0"?><dataSet xmlns="http://report_xml.org/dataSet/201006"><dataTable><id>C1</id></dataTable></dataSet></report>
</return>
</ns0:getReportOutputResponse>
</S:Body>
</S:Envelope>
像这样的东西?
DECLARE @data XML = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO03ZWJsb2dpYy5hcHAuU0JNLVJhcG9yV1MAAADWAAAAI3dlYmxvZ2ljLndvcmthcmVhL0cmluZ1dvcmtDb250ZXh0ABIyMDIwLE4LjE0MjIuNDAAAA==</WorkContext>
</S:Header>
<S:Body>
<ns0:getReportOutputResponse xmlns:ns0="http://report_xml.org">
<return>
<pagekey>i6161140E964FF7A072CD2E3F2BB9C0</pagekey>
<report><?xml version="1.0"?><dataSet xmlns="http://report_xml.org/dataSet/201006"><dataTable><id>C1</id></dataTable></dataSet></report>
</return>
</ns0:getReportOutputResponse>
</S:Body>
</S:Envelope>';
-- define the two relevant XML namespaces
WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap/envelope/' AS soap,
'http://report_xml.org' AS RP)
SELECT
-- get the "pagekey" element from the "body"
XC.value('(RP:getReportOutputResponse/return/pagekey/text())[1]', 'VARCHAR(100)')
FROM
-- get the <s:Body> part as XML fragment
@data.nodes('/soap:Envelope/soap:Body') AS XT(XC)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.