繁体   English   中英

SQL 服务器 Xml 查询与级联命名空间

[英]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>&lt;?xml version="1.0"?>&lt;dataSet xmlns="http://report_xml.org/dataSet/201006">&lt;dataTable>&lt;id>C1&lt;/id>&lt;/dataTable>&lt;/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>&lt;?xml version="1.0"?>&lt;dataSet xmlns="http://report_xml.org/dataSet/201006">&lt;dataTable>&lt;id>C1&lt;/id>&lt;/dataTable>&lt;/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM