Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос к xml, с указанным пространством имен.  [new]
Lokli
Member

Откуда:
Сообщений: 28
Получаю от web-сервиса ответ в виде xml. Хочу вытащить из него данные с помощью ms-sql.
Получается вот такой скрипт:

+
CREATE TABLE #Customers (
--                [document-control-number] varchar(36) primary key
                [document-control-number] varchar(36)
               ,[partner-iln] varchar(13)
               ,[tracking-id] varchar(100)
               ,[document-type] varchar(10)
               ,[document-version] varchar(10)
               ,[document-standard] varchar(10)
               ,[document-test] varchar(10)
               ,[document-status] varchar(1)
               ,[document-number] varchar(36)
               ,[document-date] date
               ,[receive-date] date
                );  

DECLARE @docHandle int;  
DECLARE @xmlDocument xml;
SET @xmlDocument = N'<RetRes xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.comarch.com/">
  <Res>00000000</Res>
  <Cnt>
    <mailbox-response>
      <document-info>
        <partner-iln>4607070199991</partner-iln>
        <tracking-id>{2dd5bd41-0a0a-0a0a-0a0a-0a0a0a0a0a0a}</tracking-id>
        <document-type>ORDER</document-type>
        <document-version>RU1</document-version>
        <document-standard>XML</document-standard>
        <document-test>P</document-test>
        <document-status>N</document-status>
        <document-number>709600158</document-number>
        <document-date>2017-04-06</document-date>
        <document-control-number>923901357</document-control-number>
        <receive-date>2017-04-06 10:02:56</receive-date>
      </document-info>
      <document-info>
        <partner-iln>4607070199991</partner-iln>
        <tracking-id>{ad78bd41-0a0a-0a0a-0a0a-0a0a0a0a0a0a}</tracking-id>
        <document-type>ORDER</document-type>
        <document-version>RU1</document-version>
        <document-standard>XML</document-standard>
        <document-test>P</document-test>
        <document-status>N</document-status>
        <document-number>709600177</document-number>
        <document-date>2017-04-06</document-date>
        <document-control-number>923869795</document-control-number>
        <receive-date>2017-04-06 09:02:15</receive-date>
      </document-info>
    </mailbox-response>
  </Cnt>
</RetRes>';  
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument,'<RetRes xmlns:aa="http://www.comarch.com/" />';

SELECT * FROM OPENXML(@docHandle, N'aa:RetRes',2) WITH (R char(8) 'aa:Res')

INSERT #Customers   
SELECT *   
FROM OPENXML(@docHandle, N'aa:RetRes/aa:Cnt/aa:mailbox-response/aa:document-info',2)
  WITH #Customers

SELECT * FROM #Customers

EXEC sp_xml_removedocument @docHandle; 
DROP TABLE #Customers


Тэг Res у меня получается вытащить, а вот во временную таблицу пишется две строки со значениями null. Подскажите, пожалуйста, как правильно сделать, что бы временная таблица заполнялась данными.

P.S.: подозреваю, что необходимо указать пространство имён на выбираемые тэги, но не знаю где и как.
P.P.S.: я могу заполнить врем.таблицу с помощью указания схемы, а не таблицы в WITH, но хотелось бы использовать такой вариант.
9 апр 17, 12:26    [20382042]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к xml, с указанным пространством имен.  [new]
Lokli
Member

Откуда:
Сообщений: 28
Совсем забыл:
+ Microsoft SQL Server
Microsoft SQL Server Management Studio 10.50.1600.1
Клиентские средства служб Microsoft Analysis Services 10.50.1600.1
Компоненты доступа к данным (MDAC) 3.86.3959
Microsoft MSXML 3.0 5.0 6.0
Microsoft Internet Explorer 8.0.7601.17514
Microsoft .NET Framework 2.0.50727.5420
Операционная система 6.1.7601
[/quot]
9 апр 17, 12:35    [20382067]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к xml, с указанным пространством имен.  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Lokli
но не знаю где и как.
Указав в наименовании столбца таблицы:
CREATE TABLE #Customers (
                [aa:document-control-number] varchar(36)
                ...
)


Не хотите воевать со схемами - пользуйтесь nodes() вместо openxml().
9 апр 17, 13:11    [20382109]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к xml, с указанным пространством имен.  [new]
Lokli
Member

Откуда:
Сообщений: 28
invm
Указав в наименовании столбца таблицы
- а так можно было?! Вот точно бы не догадался. )))

invm
Не хотите воевать со схемами - пользуйтесь nodes() вместо openxml().

Спасибо за совет. Пойду курить msdn на данную тему.
9 апр 17, 14:18    [20382265]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить