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

Откуда: СПб
Сообщений: 324
Добрый день.
Честно скажу, я не силен в XML, поэтому обращаюсь к вам.
Дело такое, имеем XML вида:
<EquipmentInformation>
    <Description><![CDATA[]]></Description>
    <Equipment>    
      <EquipmentProperty>
        <ID>Name</ID>
        <Value>
          <ValueString><S7-Prog-PL-01/IsmagilovBlock]></ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>Name</Key>
        </Value>
      </EquipmentProperty>
      
      <EquipmentProperty>
        <ID>MANUFACTURER_NAME</ID>
        <Value>
          <ValueString>SIEMENS</ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>MANUFACTURER_NAME</Key>
        </Value>
      </EquipmentProperty>
   </Equipment>
</EquipmentInformation>
Нужно написать запрос, который бы вернул таблицу вида:
Parametr Value
Name S7-Prog-PL-01/IsmagilovBlock
MANUFACTURER_NAME SIEMENS

Т.е. получить все EquipmentProperty/ID, EquipmentProperty/Value/ValueString
Количество параметров оборудования (тэг EquipmentProperty может быть разным).

Заранее благодарю за помощь.
26 май 11, 12:58    [10712419]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Гришков Максим,

а что не получается то?
26 май 11, 13:13    [10712516]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
Гришков Максим
Member

Откуда: СПб
Сообщений: 324
WarAnt,

Все уже разобрался.
Не получалось вывести второй столбец.
Вот запрос - вдруг кому-то будет полезен.
SELECT nref.value('ID[1]', 'nvarchar(50)') as id,
       nref.value('(Value/ValueString)[1]', 'nvarchar(50)') value
FROM   @l_xml.nodes('/EquipmentInformation/Equipment/EquipmentProperty') AS R(nref)
26 май 11, 13:15    [10712529]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Решил попробовать.
Честно скажу, выдает ошибку при присвоении
declare @l_xml xml
set @l_xml = '<EquipmentInformation>
    <Description><![CDATA[]]></Description>
    <Equipment>    
      <EquipmentProperty>
        <ID>Name</ID>
        <Value>
          <ValueString><S7-Prog-PL-01/IsmagilovBlock]></ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>Name</Key>
        </Value>
      </EquipmentProperty>
      
      <EquipmentProperty>
        <ID>MANUFACTURER_NAME</ID>
        <Value>
          <ValueString>SIEMENS</ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>MANUFACTURER_NAME</Key>
        </Value>
      </EquipmentProperty>
   </Equipment>
</EquipmentInformation>'
SELECT @l_xml
в строке
<ValueString><S7-Prog-PL-01/IsmagilovBlock]></ValueString>
26 май 11, 13:44    [10712843]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
Гришков Максим
Member

Откуда: СПб
Сообщений: 324
Владимир СА
выдает ошибку при присвоении
в строке
<ValueString><S7-Prog-PL-01/IsmagilovBlock]></ValueString>

Тоже самое было. Что сказать, вот так братья итальянцы из Siemens формируют XML... :( Я просто replace'ом обошелся:
declare @l_str nvarchar(max)
declare @l_xml xml
set @l_str = '<EquipmentInformation>
    <Description><![CDATA[]]></Description>
    <Equipment>    
      <EquipmentProperty>
        <ID>Name</ID>
        <Value>
          <ValueString><S7-Prog-PL-01/IsmagilovBlock]></ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>Name</Key>
        </Value>
      </EquipmentProperty>
      
      <EquipmentProperty>
        <ID>MANUFACTURER_NAME</ID>
        <Value>
          <ValueString>SIEMENS</ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>MANUFACTURER_NAME</Key>
        </Value>
      </EquipmentProperty>
   </Equipment>
</EquipmentInformation>'


set @l_str = replace(@l_str, '<ValueString><', '<ValueString>');
set @l_str = replace(@l_str, '></ValueString>', '</ValueString>');
SELECT @l_str
set @l_xml = convert(xml, @l_str)

SELECT nref.value('ID[1]', 'nvarchar(50)') as id,
       nref.value('(Value/ValueString)[1]', 'nvarchar(50)') value
FROM   @l_xml.nodes('/EquipmentInformation/Equipment/EquipmentProperty') AS R(nref))

Скорее всего это "затык", но что делать в таком случае - я не знаю, "собратья по разуму" тоже ничего хорошего не ответили.
Может кто знает, как это по-другому сделать?
26 май 11, 15:47    [10714013]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Кто-то халявит на той стороне:
Гришков Максим
<EquipmentInformation>
    <Description><![CDATA[]]></Description>
    <Equipment>    
      <EquipmentProperty>
        <ID>Name</ID>
        <Value>
          <ValueString> <![CDATA[ <S7-Prog-PL-01/IsmagilovBlock]> ]]> </ValueString>
          <DataType>string</DataType>
          <UnitOfMeasure><![CDATA[]]></UnitOfMeasure>
          <Key>Name</Key>
        </Value>
      </EquipmentProperty>
   </Equipment>
</EquipmentInformation>
Оставлю ка это здесь.
26 май 11, 19:33    [10715819]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу из XML  [new]
Гришков Максим
Member

Откуда: СПб
Сообщений: 324
Mnior
Кто-то халявит на той стороне:

:)
26 май 11, 20:32    [10715969]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить