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

Откуда:
Сообщений: 72
Добрый день, вечер :)
имеется xml
<doc id='0'>
<field name='componentId' norm='1.0' flags='Idfp-S---N---'>
<val>1</val>
</field>
<field name='componentPath' norm='1.0' flags='Idfp-S---N---'>
<val>1</val>
</field>
<field name='componentTypeId' norm='1.0' flags='Idfp-S---N---'>
<val>1</val>
</field>
<field name='description' norm='1.0' flags='IdfpTS---N---'>
<val>Chassis</val>
</field>
<field name='descriptionId' norm='1.0' flags='Idfp-S---N---'>
<val>314795</val>
</field>
<field name='marketId' norm='1.0' flags='Idfp-S---N---'>
<val>1000</val>
</field>
</doc>


хочется :) получить такое
id | componentId | componentPath | componentTypeId | description | descriptionId | marketId
0 1 1 1 Chassis 314795 1000

Заранее всем спасибо за помощь
20 дек 16, 19:32    [20028971]     Ответить | Цитировать Сообщить модератору
 Re: Openxml не удается парсит XML  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4906
И что у вас не получается?
21 дек 16, 00:37    [20029925]     Ответить | Цитировать Сообщить модератору
 Re: Openxml не удается парсит XML  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
Откуда такой xml взяли? В xml для атрибутов используются двойные, а не одинарные кавычки!
21 дек 16, 10:27    [20030627]     Ответить | Цитировать Сообщить модератору
 Re: Openxml не удается парсит XML  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
Я с openxml не очень дружу, но синтаксис xpath там вроде одинаковый, так что вот намётки:
DECLARE @X xml = '<doc id="0">
<field name="componentId" norm="1.0" flags="Idfp-S---N---">
<val>1</val>
</field>
<field name="componentPath" norm="1.0" flags="Idfp-S---N---">
<val>1</val>
</field>
<field name="componentTypeId" norm="1.0" flags="Idfp-S---N---">
<val>1</val>
</field>
<field name="description" norm="1.0" flags="IdfpTS---N---">
<val>Chassis</val>
</field>
<field name="descriptionId" norm="1.0" flags="Idfp-S---N---">
<val>314795</val>
</field>
<field name="marketId" norm="1.0" flags="Idfp-S---N---">
<val>1000</val>
</field>
</doc>'

SELECT c.value('@id','int') id
      ,c.value('(field[@name="componentId"]/val)[1]','int') componentId
      ,c.value('(field[@name="componentPath"]/val)[1]','int') componentPath
      ,c.value('(field[@name="componentTypeId"]/val)[1]','int') componentTypeId
      ,c.value('(field[@name="description"]/val)[1]','nvarchar(4000)') description
      ,c.value('(field[@name="descriptionId"]/val)[1]','int') descriptionId
      ,c.value('(field[@name="marketId"]/val)[1]','int') marketId
  FROM @X.nodes('//doc') T(c);
21 дек 16, 10:35    [20030667]     Ответить | Цитировать Сообщить модератору
 Re: Openxml не удается парсит XML  [new]
ambako
Member

Откуда:
Сообщений: 72
Sybex
Больше спасибо
21 дек 16, 10:45    [20030722]     Ответить | Цитировать Сообщить модератору
 Re: Openxml не удается парсит XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Так будет немного быстрее парсится:
SELECT *
FROM (
    SELECT col = t.c.value('@name', 'SYSNAME')
         , val = t.c.value('(val/text())[1]', 'NVARCHAR(4000)')
    FROM @x.nodes('doc/field') t(c)
) t
PIVOT (
    MAX(val)
    FOR col IN (componentId, componentPath, componentTypeId, description, descriptionId, marketId)
) p
21 дек 16, 10:53    [20030781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить