SQL Server Extract Xml Tag Внутренний текст с пространством имен - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть следующее значение xml в таблице в столбце. Мне нужно извлечь значение errorCode с помощью запроса SQL.

Я пробовал следующий запрос, но он показывает ошибку:

<?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 ()]: имя «мыло» не обозначает пространство имен

1 Ответ

0 голосов
/ 26 апреля 2019

Я нашел решение.Я должен добавить декларацию пространства имен 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

...