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

Откуда: СПб
Сообщений: 156
Здравствуйте!

Помогите, пожалуйста, получить запись с полями ExpiredDate, Token. Что-то никак не пойму, как указыать пространства имён.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetServiceTokenResponse xmlns="http://tempuri.org/">
      <GetServiceTokenResult
      xmlns:a="http://schemas.datacontract.org/2004/07/Contracts"
      xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
         <a:ExpiredDate>2016-02-11T01:41:42</a:ExpiredDate>
         <a:Token>390230BBFE4E46FFA3E794B9EE45FC44</a:Token>
      </GetServiceTokenResult>
    </GetServiceTokenResponse>
  </s:Body>
</s:Envelope>
20 окт 16, 12:50    [19804220]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3015
ArkadyL,
declare @xml xml = '
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetServiceTokenResponse xmlns="http://tempuri.org/">
      <GetServiceTokenResult
      xmlns:a="http://schemas.datacontract.org/2004/07/Contracts"
      xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
         <a:ExpiredDate>2016-02-11T01:41:42</a:ExpiredDate>
         <a:Token>390230BBFE4E46FFA3E794B9EE45FC44</a:Token>
      </GetServiceTokenResult>
    </GetServiceTokenResponse>
  </s:Body>
</s:Envelope>'

select @xml.value('(/*:Envelope/*:Body/*:GetServiceTokenResponse/*:GetServiceTokenResult/*:ExpiredDate)[1]', 'varchar(100)')
20 окт 16, 13:11    [19804362]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
поиск
20 окт 16, 13:47    [19804587]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
ArkadyL
Member

Откуда: СПб
Сообщений: 156
Спасибо! Попробую разобраться.
20 окт 16, 14:08    [19804698]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
ArkadyL
Member

Откуда: СПб
Сообщений: 156
Ваш вариант, конечно, работает.

Попробовал с ещё с помощью ;with xmlnamespaces. Где тут ошибка?

;with xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' AS s, 'http://schemas.datacontract.org/2004/07/Contracts' AS a)
select n.value('(a:ExpiredDate/text())[1]', 'datetime'),
       n.value('(a:Token/text())[1]', 'varchar(32)') 
  from @xml_name.nodes('s:Envelope/s:Body/GetServiceTokenResponse/GetServiceTokenResult') t(n)
20 окт 16, 14:36    [19804853]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
ArkadyL,

у узлов GetServiceTokenResponse и GetServiceTokenResult есть дефолтный (без префикса) неймспейс http://tempuri.org/ - нужно объявить и его, задав свой произвольный префикс, и использовать этот префикс:

;with xmlnamespaces(
  'http://schemas.xmlsoap.org/soap/envelope/' AS s,
  'http://schemas.datacontract.org/2004/07/Contracts' AS a,
  'http://tempuri.org/' as tmp
)
select n.value('(a:ExpiredDate/text())[1]', 'datetime'),
       n.value('(a:Token/text())[1]', 'varchar(32)') 
from @xml.nodes('s:Envelope/s:Body/tmp:GetServiceTokenResponse/tmp:GetServiceTokenResult') t(n)
20 окт 16, 15:05    [19804985]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
ArkadyL
Member

Откуда: СПб
Сообщений: 156
Большое спасибо!
20 окт 16, 15:22    [19805063]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, разобрать XML  [new]
p4el1991
Member

Откуда:
Сообщений: 1
ArkadyL
Большое спасибо!

Присоединяюсь
21 окт 16, 13:26    [19808953]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить