T-SQL Читать XML-файл с пространствами имен - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь прочитать XML-файл на сервере SQL:

DECLARE @XMLToParse  XML 

-- Load the XML data in to a variable to work with.
-- This would typically be passed as a parameter to a stored proc
SET @XMLToParse = '<Response xmlns="http://tempuri.org/">
    <AuthResult xmlns:a="http://schemas.datacontract.org/2004/07/Sistema.Soap.Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Result>
            <a:Id_Value>500</a:Id_Value>
        </a:Result>
        <a:Result>
            <a:Id_Value>895</a:Id_Value>
        </a:Result>
    </AuthResult>
</Response>'

-- Declare temp table to parse data into
DECLARE @ParsingTable  TABLE
    (Id_Value   INT)

-- Parse the XML in to the temp table declared above
INSERT
INTO    @ParsingTable
    (Id_Value)
SELECT  xmlData.A.value('.', 'INT') AS Id_Value
FROM    @XMLToParse.nodes('Response/AuthResult/Result') xmlData(A)

-- Insert into the actual table from the temp table

SELECT  Id_Value
FROM    @ParsingTable

Видимо код правильный, но я не могу получить значения, где я могу ошибаться?

1 Ответ

0 голосов
/ 15 мая 2018

Используйте WITH XMLNAMESPACES для объявления пространств имен и используйте соответствующий префикс для узлов, не входящих в пространство имен по умолчанию.

...

-- Parse the XML in to the temp table declared above
;WITH XMLNAMESPACES (DEFAULT 'http://tempuri.org/',
                     'http://schemas.datacontract.org/2004/07/Sistema.Soap.Contracts' as a,
                     'http://www.w3.org/2001/XMLSchema-instance' as i
                     )
INSERT
INTO    @ParsingTable
    (Id_Value)
SELECT  xmlData.A.value('.', 'INT') AS Id_Value
FROM    @XMLToParse.nodes('Response/AuthResult/a:Result') xmlData(A)

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...