SQL Server使用命名空间提取Xml标签内部文本

时间:2019-04-26 06:18:14

标签: sql-server xml data-extraction

我在列中的表中具有以下xml值。我需要使用SQL查询提取errorCode值。

我尝试了以下查询,但显示出一个错误:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <queryCalendarResponse xmlns="http://www.foobar.com/WS">
            <queryCalendarReturn>
                <errorCode>100</errorCode>
                <errorMessage>Success</errorMessage>
            </queryCalendarReturn>
        </queryCalendarResponse>
    </soapenv:Body>
</soapenv:Envelope>
SELECT
    CAST(REPLACE(Response, 'utf-8', 'utf-16') AS XML).value('
 (/soap:Envelope/soap:Body/queryCalendarResponse/queryCalendarReturn/errorCode)[1]', 'nvarchar(max)'), * 
FROM
    LogTable 
WHERE
    ID = 100

我收到此错误:

  

XQuery [value()]:名称“ soap”不表示名称空间

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我必须将xml名称空间声明添加到我的sql中。所以我这样的最终sql并返回值:


select CAST(REPLACE(Response,'utf-8','utf-16') AS XML).value('
        declare namespace ns1="http://schemas.xmlsoap.org/soap/envelope/";
        declare namespace ns2="http://www.foobar.com/WS";
        (/ns1:Envelope/ns1:Body/ns2:queryCalendarResponse/ns2:queryCalendarReturn/ns2:errorCode)[1]',
        'nvarchar(max)'), * from LogTable where ID = 100