Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / xml.value вложенные значения / 3 сообщений из 3, страница 1 из 1
15.05.2018, 20:38
    #39645211
gnatochka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml.value вложенные значения
Добрый вечер, помогите пожалуйста с запросом.
Есть xml вида

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
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 typeA175mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMemberA176 mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember1

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

Запрос
Код: sql
1.
2.
3.
4.
5.
;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 typeA175A176

Если считывать с точкой
Код: sql
1.
2.
3.
4.
;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)



Выдает без пробелов из всех строк
texttypeA175mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMemberПИФA176mem-int:SredstvaNaxodUProfUchRynkaCzenBumagMember1qwe
...
Рейтинг: 0 / 0
15.05.2018, 21:36
    #39645224
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml.value вложенные значения
Схемы нужно указывать как в документе, а не как попало.
Код: sql
1.
2.
3.
4.
5.
6.
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);
...
Рейтинг: 0 / 0
15.05.2018, 23:28
    #39645246
gnatochka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml.value вложенные значения
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / xml.value вложенные значения / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]