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

Откуда: Харків
Сообщений: 1233
Подскажите плиз, как распарсить одним запросом колонку типа XML, содержащую данные в виде:
<rows><row PId="372ccd43-2855-4802-a6d4-9014a02de644" 
              DateTime="2007-06-30 23:59:00.274" 
              Site="xxx.com" 
              IpAddress="00000000000" 
              EventType="9" 
              UserAgent=""
              Data="Data" /><row...
Запутался с XML тегами...
14 июл 11, 15:51    [10974679]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

nodes(), value()

конкретно что не получается?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:53    [10974697]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
daw, я пишу как то так:
SELECT MyData.value('(/Site)[1]', 'VARCHAR(MAX)') AS [Site]
            FROM
              @xml.nodes('rows/row') TempXML (MyData)

Получаю 10 тыс. строк с NULL значениями.
Как правильно?
14 июл 11, 15:58    [10974744]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Получаю 10 тыс. строк с NULL значениями.

дык. Site - это ж атрибут, а не субэлемент. имена атрибутов в xpath с @ начинаются.

Posted via ActualForum NNTP Server 1.4

14 июл 11, 16:01    [10974771]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Мерси боку! :) Слона то я и не заметил
14 июл 11, 16:06    [10974810]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Еще.
А можно ли выбирать прямо из таблички, не вычитывая курсором каждое значение в переменную @xml ?
14 июл 11, 16:20    [10974937]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> А можно ли выбирать прямо из таблички, не вычитывая курсором каждое значение в переменную @xml ?

можно.

from table
   cross apply table.xml_column.nodes(...) t (c)

Posted via ActualForum NNTP Server 1.4

14 июл 11, 16:22    [10974955]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Первые 10 тыс. (одну строку таблицы) получаю, а дальше:

Msg 512, Level 16, State 1, Line 15
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Как его заджоинить? АйДишник в таблице есть
14 июл 11, 16:41    [10975149]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

какой-такой субкьюэри у вас?? запрос показывайте.

Posted via ActualForum NNTP Server 1.4

14 июл 11, 16:44    [10975173]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
DECLARE @vTracking TABLE (Id bigint, XmlRecord xml)

INSERT INTO @vTracking
SELECT TOP 10 Id, XmlRecord FROM MyView

SELECT tt.Id,
 MyData.value('(./@PId)[1]', 'UNIQUEIDENTIFIER') AS [PId], 
       MyData.value('(./@CId)[1]', 'UNIQUEIDENTIFIER') AS [CId],
       MyData.value('(./@DateTime)[1]', 'DATETIME') AS [DateTime], 
       MyData.value('(./@Site)[1]', 'NVARCHAR(MAX)') AS [Site],
            FROM @vTracking tt
            
            cross apply tt.XmlRecord.nodes('/rows/row') TempXML (MyData)
14 июл 11, 16:59    [10975280]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
запятая лишняя. У меня больше тегов в XML просто
14 июл 11, 17:00    [10975284]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

этот запрос такой ошибки выдать не может. ищите где-то еще.
зы: кстати, с атрибутами можно просто '@CId'

Posted via ActualForum NNTP Server 1.4

14 июл 11, 17:01    [10975292]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Спасибо за помощь! Буду разбираться.
14 июл 11, 17:24    [10975467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить