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

Откуда: Тольятти
Сообщений: 464
Добрый день!

Возникла проблема с парсингом YML (яндекс-маркет), с получением групп товаров.
Исходник:
<yml_catalog date="2016-10-04 06:00">
  <shop>
    <name>www.ru</name>
    <company>www.ru</company>
    <url>http://www.ru</url>
    <currencies>
      <currency id="RUB" rate="1" />
    </currencies>
    <categories>
      <category id="18">Велогибриды</category>
      <category id="23">Электросамокаты</category>
      <category id="22">Детям</category>
      <category id="39">Электроквадроциклы</category>
      <category id="19">Экомобилики</category>
      <category id="31">Велосипеды</category>
      <category id="21">Электроскутеры</category>
      <category id="24">Аксессуары</category>
      <category id="27">Запчасти</category>
      <category id="50">Электро велорикши</category>
      <category id="32">Системы хранения</category>
      <category id="41">Сделано в России</category>
      <category id="40">Гироскутеры</category>
      <category id="52">Скейты и Ролики</category>
      <category id="20">Гольф-кары</category>
      <category id="53">Электропитбайки</category>
      <category id="25">Тюнинг</category>
      <category id="34">С пробегом</category>
      <category id="51">Грузовые электроскутеры</category>
      <category id="26">Прочее</category>
    </categories></shop>
</yml_catalog>


У меня получился запрос (основная часть):
SELECT *
    FROM OPENXML(@hDoc, '/yml_catalog/shop/categories/category', 2)
        WITH(
             pgID int '@id'
             ,pgName varchar(256) '../category'
            )


На выходе имеем:
pgID    pgName
18	Велогибриды
23	Велогибриды
22	Велогибриды
39	Велогибриды
19	Велогибриды
31	Велогибриды
21	Велогибриды
24	Велогибриды
27	Велогибриды
50	Велогибриды
32	Велогибриды
41	Велогибриды
40	Велогибриды
52	Велогибриды
20	Велогибриды
53	Велогибриды
25	Велогибриды
34	Велогибриды
51	Велогибриды
26	Велогибриды


Как добиться правильного вывода наименования групп?
24 ноя 16, 10:46    [19928724]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг YML  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 119
Я не силён в OPENXML, но вроде так:

SELECT *
    FROM OPENXML(@hDoc, '/yml_catalog/shop/categories/category', 2)
        WITH(
             pgID int '@id'
             ,pgName varchar(256) '.'
            )
24 ноя 16, 11:10    [19928842]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг YML  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 464
Sybex,

Спасибо, помогло
24 ноя 16, 11:11    [19928847]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг YML  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 119
Я больше так люблю:

+
declare @x xml = N'<yml_catalog date="2016-10-04 06:00">
  <shop>
    <name>www.ru</name>
    <company>www.ru</company>
    <url>http://www.ru</url>
    <currencies>
      <currency id="RUB" rate="1" />
    </currencies>
    <categories>
      <category id="18">Велогибриды</category>
      <category id="23">Электросамокаты</category>
      <category id="22">Детям</category>
      <category id="39">Электроквадроциклы</category>
      <category id="19">Экомобилики</category>
      <category id="31">Велосипеды</category>
      <category id="21">Электроскутеры</category>
      <category id="24">Аксессуары</category>
      <category id="27">Запчасти</category>
      <category id="50">Электро велорикши</category>
      <category id="32">Системы хранения</category>
      <category id="41">Сделано в России</category>
      <category id="40">Гироскутеры</category>
      <category id="52">Скейты и Ролики</category>
      <category id="20">Гольф-кары</category>
      <category id="53">Электропитбайки</category>
      <category id="25">Тюнинг</category>
      <category id="34">С пробегом</category>
      <category id="51">Грузовые электроскутеры</category>
      <category id="26">Прочее</category>
    </categories></shop>
</yml_catalog>';

SELECT c.value('@id[1]','int') AS [pgID]
      ,c.value('.[1]','nvarchar(100)') AS [pgName]
  FROM @x.nodes('//yml_catalog/shop/categories/category') T(c);
24 ноя 16, 11:14    [19928865]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг YML  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
saszay,

pgName varchar(256) '.'
24 ноя 16, 11:22    [19928911]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить