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

Откуда:
Сообщений: 123
Добрый день
Есть такая таблица

iddeletedlastModifyNoderevisiontypexml
11D3C79C-AC57-4317-9F48-953110B173990586DACA3-4203-CEA1-0145-1C8EBE880004 1732980City<r eid="11d3c79c-ac57-4317-9f48-953110b17399"><revision>1732980</revision><lastModifyNode>586daca3-4203-cea1-0145-1c8ebe880004</lastModifyNode><deleted>false</deleted><modified>2015-03-06T09:47:02.116+05:00</modified><created>2015-03-06T09:10:22.100+05:00</created><localId>5</localId><name>Нефтеюганск</name><phoneCodes null="1"></phoneCodes><externalId>8600001400000</externalId></r>


Как извлечь из нее только определенные теги?
Пробовал таким образом
declare @x xml
set @x = (select top 1[xml] from [dbo].[entity]where [type] = 'City')
 
select
 
 a.n.value('.', 'varchar(100)') as name
,b.n.value('.', 'varchar(100)') as revision
from
 @x.nodes('//name') a(n) cross apply
 @x.nodes('//revision') b(n);

Для одной строки работает. но нужно по всем записям таблицы entity
12 фев 16, 20:11    [18811069]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
hulk77
но нужно по всем записям таблицы entity

Ну так подставьте в ваш запрос таблицу entity
В хелпе же есть пример
12 фев 16, 20:26    [18811120]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
hulk77
Member

Откуда:
Сообщений: 123
Добрался до такого решения
DECLARE @x XML
SELECT @x = 
(
		SELECT 
		[xml].query('
            for $a in //
            return < 
                eid="{$a/eid}" 
                name="{$a/name}" 
            />
        ')
		FROM [Chain].[dbo].[entity] ent WHERE [type] = 'City'
		FOR XML AUTO
 )
		SELECT eid = T.Item.value('@eid', 'varchar(50)'),
		       name = T.Item.value('@Name', 'varchar(50)')

		FROM   @x.nodes('//ent') AS T(Item)


Если не сложно, подскажите как исправить, получаю ошибку
Cannot find either column "xml" or the user-defined function or aggregate "xml.query", or the name is ambiguous.

Помогите пожалуйста найти самое производительное решение. т.к. в таблице entity находится много записей, которые возможно придется периодически парсить
13 фев 16, 14:22    [18812892]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
hulk77
Добрался до такого решения
Мда...
select
 t.n.value('name[1]', 'varchar(100)'),
 t.n.value('revision[1]', 'varchar(100)')
from
 dbo.entity e cross apply
 e.[xml].nodes('/r') t(n)
where
 [type] = 'City';
13 фев 16, 14:59    [18812939]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
hulk77
Member

Откуда:
Сообщений: 123
invm, я был далек от такого решения..
Спасибо за помощь
13 фев 16, 15:08    [18812970]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
hulk77
я был далек от такого решения.

Т.е. до примера из хелпа даже не дошли ?
13 фев 16, 15:16    [18812986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить