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

Откуда:
Сообщений: 2
Доброго времени суток!
Столкнулся с проблемой, не могу разобрать xml файл
Текст xml
<?xml version="1.0"?>
<cards>
	<card>
		<card_id>113</card_id>
		<user_buhta_id>1617</user_buhta_id>
		<checking_buhta_id>1617</checking_buhta_id>
		<types>
			<type>28791</type>
		</types>
		<comment>ddddssss 123</comment>
	</card>
	<card>
		<card_id>112</card_id>
		<user_buhta_id>1617</user_buhta_id>
		<checking_buhta_id>1617</checking_buhta_id>
		<types>
			<type>28790</type>
		</types>
		<comment>qwwqqewq</comment>
	</card>
	<card>
		<card_id>109</card_id>
		<user_buhta_id>1617</user_buhta_id>
		<checking_buhta_id>1617</checking_buhta_id>
		<types>
			<type>28790</type>
			<type>28791</type>
		</types>
		<comment/>
	</card>	
</cards>


Выполняю запрос:
DECLARE @xml XML
SELECT @xml = BulkColumn
FROM OPENROWSET(BULK 'C:\cards_26_09_2019.xml', SINGLE_BLOB) x

SELECT b.n.value('(*:card_id/text())[1]', 'INT') AS card_id
, b.n.value('(*:user_buhta_id/text())[1]', 'INT') AS user_buhta_id
, b.n.value('(*:checking_buhta_id/text())[1]', 'INT') AS checking_buhta_id
, b.n.value('(*:types/*:type/text())[1]', 'INT') AS type
, b.n.value('(*:comment/text())[1]', 'NVARCHAR(200)') AS comment    
FROM @xml.nodes('//*:card') b(n)


Выводится 3 записи. А мне надо что бы запись с id 109 выводилась 2 раза с разными типами.
Помогите пожалуйста.
10 окт 19, 11:45    [21991137]     Ответить | Цитировать Сообщить модератору
 Re: Парсим XML  [new]
Sergey Syrovatchenko
Member

Откуда:
Сообщений: 134
SELECT b.n.value('(card_id/text())[1]', 'INT') AS card_id
     , b.n.value('(user_buhta_id/text())[1]', 'INT') AS user_buhta_id
     , b.n.value('(checking_buhta_id/text())[1]', 'INT') AS checking_buhta_id
     , t.c.value('(text())[1]', 'INT') AS type
     , b.n.value('(comment/text())[1]', 'NVARCHAR(200)') AS comment
FROM @x.nodes('cards/card') b(n)
CROSS APPLY b.n.nodes('types/type') t(c)
10 окт 19, 11:49    [21991141]     Ответить | Цитировать Сообщить модератору
 Re: Парсим XML  [new]
dm_fillipov
Member

Откуда:
Сообщений: 2
Sergey Syrovatchenko, спасибо большое за помощь!
10 окт 19, 11:50    [21991143]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить