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

Откуда: Kazan
Сообщений: 46
Добрый вечер, помогите пожалуйста с запросом.
Есть xml вида

Declare @xml XML

SET @xml = 
'<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" 
xmlns:xbrldi="http://xbrl.org/2006/xbrldi" 
xmlns:dim-int="http://www.cbr.ru/xbrl/udr/dim/dim-int" >
<xbrli:context id="A175">
	<xbrli:entity>
		<xbrli:identifier scheme="http://www.cbr.ru">0000000000000</xbrli:identifier>
	</xbrli:entity>
	<xbrli:period>
		<xbrli:instant>2018-01-01</xbrli:instant>
	</xbrli:period>
	<xbrli:scenario>
		<xbrldi:explicitMember dimension="dim-int:Dz_DataAxis">mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember</xbrldi:explicitMember>
		<xbrldi:typedMember dimension="dim-int:IdAifPifTaxis"><dim-int:IdAifPif_TypedName>ПИФ</dim-int:IdAifPif_TypedName></xbrldi:typedMember>
	</xbrli:scenario>
</xbrli:context>
<xbrli:context id="A176">
	<xbrli:entity>
		<xbrli:identifier scheme="http://www.cbr.ru">0000000000000</xbrli:identifier>
	</xbrli:entity>
	<xbrli:period>
		<xbrli:instant>2018-01-01</xbrli:instant>
	</xbrli:period>
	<xbrli:scenario>
		<xbrldi:explicitMember dimension="dim-int:Dz_DataAxis">mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember1</xbrldi:explicitMember>
		<xbrldi:typedMember dimension="dim-int:IdAifPifTaxis"><dim-int:IdAifPif_TypedName>qwe</dim-int:IdAifPif_TypedName></xbrldi:typedMember>
	</xbrli:scenario>
</xbrli:context>
</xbrli:xbrl>
'


Хочу считать в таблицу данные в виде
text type
A175mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember
A176 mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember1


т.е. во второй столбец только данные с @dimension="dim-int:Dz_DataAxis"

Запрос
;WITH XMLNAMESPACES ('http://www.xbrl.org/2003/instance' as xbrli, 'http://www.cbr.ru/xbrl/nso/uk/dic2' as [xbrldi], 'http://www.cbr.ru/xbrl/nso/uk/dic3' as [dim-int])
select  
 t.c.value('(@id)', 'nvarchar(100)') as [text]
  ,  t.c.query('xbrli:scenario').value('(xbrldi:explicitMember[@dimension="dim-int:Dz_DataAxis"]/text())[1]', 'nvarchar(100)') as [type]
from    @xml.nodes('xbrli:xbrl/xbrli:context') as t(c)


выдает
text type
A175
A176


Если считывать с точкой
;WITH XMLNAMESPACES ('http://www.xbrl.org/2003/instance' as xbrli, 'http://www.cbr.ru/xbrl/nso/uk/dic2' as [xbrldi], 'http://www.cbr.ru/xbrl/nso/uk/dic3' as [dim-int])
select t.c.value('(@id)', 'nvarchar(100)') as [text]
 ,  t.c.query('xbrli:scenario').value('.', 'nvarchar(100)') as [type]
from    @xml.nodes('xbrli:xbrl/xbrli:context') as t(c)


Выдает без пробелов из всех строк
texttype
A175mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMemberПИФ
A176mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember1qwe
15 май 18, 20:38    [21411702]     Ответить | Цитировать Сообщить модератору
 Re: xml.value вложенные значения  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
Схемы нужно указывать как в документе, а не как попало.
with xmlnamespaces ('http://www.xbrl.org/2003/instance' as xbrli, 'http://xbrl.org/2006/xbrldi' as xbrldi)
select  
 t.c.value('@id', 'nvarchar(100)') as [text],
 t.c.value('(xbrli:scenario/xbrldi:explicitMember[@dimension = "dim-int:Dz_DataAxis"]/text())[1]', 'nvarchar(100)') as [type]
from
 @xml.nodes('xbrli:xbrl/xbrli:context') as t(c);
15 май 18, 21:36    [21411807]     Ответить | Цитировать Сообщить модератору
 Re: xml.value вложенные значения  [new]
gnatochka
Member

Откуда: Kazan
Сообщений: 46
Спасибо!
15 май 18, 23:28    [21411966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить