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

Откуда: Moscow
Сообщений: 145
Коллеги, кто-нибудь может сообразить хитрый запрос как мне через XQuery значение параметра msprop:OnDate вытащить из ответа с сайта ЦБ?
Голову сломал уже.
<XMLNSC>
  <GetReutersCursOnDateResponse xmlns="http://web.cbr.ru/">
    <GetReutersCursOnDateResult>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" id="ReutersValutesData">
        <xs:element name="ReutersValutesData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:OnDate="20161114">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="Currency">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" name="num_code" type="xs:int" msdata:Caption="Цифровой ISO код валюты" />
                    <xs:element minOccurs="0" name="val" type="xs:decimal" msdata:Caption="котировка" />
                    <xs:element minOccurs="0" name="dir" type="xs:unsignedByte" msdata:Caption="0 - прямая котировка 1 - обратная" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
    </GetReutersCursOnDateResult>
  </GetReutersCursOnDateResponse>
</XMLNSC>
17 ноя 16, 22:58    [19905833]     Ответить | Цитировать Сообщить модератору
 Re: вытащить параметр элемента из схемы  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 119
Могу предложить такой вариант:

declare @x xml = N'<XMLNSC>
  <GetReutersCursOnDateResponse xmlns="http://web.cbr.ru/">
    <GetReutersCursOnDateResult>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" id="ReutersValutesData">
        <xs:element name="ReutersValutesData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:OnDate="20161114">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="Currency">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" name="num_code" type="xs:int" msdata:Caption="Цифровой ISO код валюты" />
                    <xs:element minOccurs="0" name="val" type="xs:decimal" msdata:Caption="котировка" />
                    <xs:element minOccurs="0" name="dir" type="xs:unsignedByte" msdata:Caption="0 - прямая котировка 1 - обратная" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
    </GetReutersCursOnDateResult>
  </GetReutersCursOnDateResponse>
</XMLNSC>'

SELECT c.value('@*:OnDate[1]','varchar(10)')
  FROM @x.nodes('//*:XMLNSC/*:GetReutersCursOnDateResponse/*:GetReutersCursOnDateResult/*:schema/*:element') T(c)
18 ноя 16, 12:02    [19907227]     Ответить | Цитировать Сообщить модератору
 Re: вытащить параметр элемента из схемы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
vjut,

DECLARE @x XML = '<XMLNSC>
  <GetReutersCursOnDateResponse xmlns="http://web.cbr.ru/">
    <GetReutersCursOnDateResult>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" id="ReutersValutesData">
        <xs:element name="ReutersValutesData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:OnDate="20161114">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="Currency">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" name="num_code" type="xs:int" msdata:Caption="Цифровой ISO код валюты" />
                    <xs:element minOccurs="0" name="val" type="xs:decimal" msdata:Caption="котировка" />
                    <xs:element minOccurs="0" name="dir" type="xs:unsignedByte" msdata:Caption="0 - прямая котировка 1 - обратная" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
    </GetReutersCursOnDateResult>
  </GetReutersCursOnDateResponse>
</XMLNSC>'
SELECT @x = @x.query( 'XMLNSC/*' )
;
SELECT @x
;
WITH XMLNAMESPACES ( 
  'http://www.w3.org/2001/XMLSchema' AS xs,
  'urn:schemas-microsoft-com:xml-msprop' AS msprop,
  DEFAULT 'http://web.cbr.ru/'
)
SELECT 
  x.value( '@msprop:OnDate', 'DATE' )
FROM 
  @x.nodes( 'GetReutersCursOnDateResponse/GetReutersCursOnDateResult/xs:schema/xs:element[@name="ReutersValutesData"]' ) t(x)
18 ноя 16, 12:11    [19907289]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить