Здравствуйте, Друзья. Есть документ xml, который нужно спарсить. Вроде все легко, установил feeds, xPath Feeds и парсишь... Но столкнулся с проблемой. Вот сам xml документ:
<yml_catalog date="2019-11-04 11:40">
<shop><name>Магазин Обуви!</name>
<company>Магазин Обуви!</company>
<url>https://respect-shoes.ru</url>
<platform>1C-Bitrix</platform>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="586">Мужчинам</category>
<category id="587" parentId="586">Мужская обувь</category>
<category id="595" parentId="587">Ботинки</category>
<category id="937" parentId="587">Дутики</category>
<category id="604" parentId="587">Кеды</category>
<category id="600" parentId="587">Кроссовки</category>
<category id="894" parentId="587">Лоферы</category>
<category id="589" parentId="587">Мокасины</category>
<category id="605" parentId="587">Пантолеты</category>
<category id="588" parentId="587">Полуботинки</category>
<category id="590" parentId="587">Сандалии</category>
<category id="608" parentId="587">Слипоны</category>
<category id="896" parentId="587">Угги</category>
<category id="816" parentId="587">Эспадрильи</category>
<category id="910" parentId="586">Сумки</category>
<category id="911" parentId="910">Сумки</category>
<category id="906" parentId="586">Аксессуары</category>
<category id="907" parentId="906">Головные уборы</category>
<category id="920" parentId="906">Зонты</category>
<category id="925" parentId="906">Очки</category>
<category id="924" parentId="906">Перчатки и варежки</category>
<category id="914" parentId="906">Ремни</category>
<category id="915" parentId="906">Шарфы и платки</category>
<category id="592">Женщинам</category>
<category id="593" parentId="592">Женская обувь</category>
<category id="609" parentId="593">Балетки</category>
<category id="596" parentId="593">Босоножки</category>
<category id="602" parentId="593">Ботильоны</category>
<category id="792" parentId="593">Ботинки</category>
<category id="607" parentId="593">Ботфорты</category>
<category id="843" parentId="593">Дутики</category>
<category id="806" parentId="593">Кеды</category>
<category id="807" parentId="593">Кроссовки</category>
<category id="611" parentId="593">Лоферы</category>
<category id="805" parentId="593">Мокасины</category>
<category id="898" parentId="593">Мюли</category>
<category id="813" parentId="593">Пантолеты</category>
<category id="812" parentId="593">Полуботинки</category>
<category id="603" parentId="593">Полусапоги</category>
<category id="899" parentId="593">Резиновая обувь</category>
<category id="804" parentId="593">Сабо</category>
<category id="808" parentId="593">Сандалии</category>
<category id="601" parentId="593">Сапоги</category>
<category id="810" parentId="593">Слипоны</category>
<category id="895" parentId="593">Туфли </category>
<category id="616" parentId="593">Угги</category>
<category id="613" parentId="593">Эспадрильи</category>
<category id="912" parentId="592">Сумки</category>
<category id="922" parentId="912">Клатчи</category>
<category id="919" parentId="912">Рюкзаки</category>
<category id="913" parentId="912">Сумки</category>
<category id="908" parentId="592">Аксессуары</category>
<category id="945" parentId="908">Бижутерия</category>
<category id="916" parentId="908">Головные уборы</category>
<category id="921" parentId="908">Зонты</category>
<category id="932" parentId="908">Кошельки</category>
<category id="918" parentId="908">Очки</category>
<category id="923" parentId="908">Перчатки и варежки</category>
<category id="909" parentId="908">Ремни</category>
<category id="917" parentId="908">Шарфы и платки</category>
</categories>
<offers><offer available="true" id="198497"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/5dd/5ddf6bfb1d3e4aa752f3ce7ee3320...
<offer available="true" id="198128"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/bdd/bdd984b962e4b7d8c7ed84b8be863...
<offer available="true" id="198300"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/1f8/1f8440c73ecd337ce68666dca4af3...
<offer available="true" id="198545"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/ace/ace9ce720736e486944c555509852...
<offer available="true" id="198809"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/b07/b075b54d4fad63485c80b8a85c7a8...
<offer available="true" id="199148"><categoryId>921</categoryId><currencyId>RUB</currencyId><model>Зонт</model><modified_time>1552454526</modified_time><name>Зонт</name><param name="Цвет">цветн.</param><pickup>true</pickup><picture>https://respect-shoes.ru/upload/iblock/eab/eab840d31ef5228b37f703b90a184...
...
И так далее.
Дело в том, что категории товаров распределены по id и расположены на блоком наверху, это бы все ничего, думал можно решить это с помощью Tamper - Find replace (если я делаю неправильно, можете подсказать правильный путь). В информации о товарах есть только id категории, но дело в том, что каждый термин имеет еще и родительский термин, который в информации о товаре не указан. Как можно решить эту проблему? Есть у кого-то идеи? Буду рад любой помощи и подсказке) Заранее спасибо
Комментарии
Грубо говоря, флоу должен быть приблизительно следующим:
Это вне контекста, фидсом - не знаю можно ли добиться подобного.
Все пункты, кроме парсинг категорий, уже сделаны. Возможностей фидс хватило с головой. Вот сопастовление айдишников - тут проблему есть... В таксономии уже существуют термины с такими айди. Там до 1000 уже все заполнено. Вот меня интересует как быть с парсингом категорий. Пока ничего в голову не приходит
Добавьте поле внешнего ID категории, в него пишите, по нему ищите, а используйте нативный.
Думал об этом, но тут есть подводные камни, во первых Feeds может искать термин либо только по tid, либо только по имени, по остальным полям увы, не умеет.
Второй вопрос - как быть тогда с родительский термином?
Возможно использовать Tamper. Но это уже костыли будут
Насколько помню, feeds и migrate по принципу работы не сильно отличаются .
У обоих есть специальная таблица для хранения связи "внешнего" и "внутреннего" ID сущности.
В migrate такой проблемы нет.
Просто в конфиге миграции указываешь, что например поле товара "категория"(в xml-файле) это внешний ID категории из миграции "категории".
Все, по этому внешнему ID из таблицы связей внешних-внутренних айдишников ищется внутренний ID(tid термина категории) и подставляется в поле "категория" импортируемой сущности "товар".
Скорее всего в Feeds такое тоже как-то должно работать.
Я правильно понимаю, что достаточно создать ещё одной поле в термина таксономии "ID"?
Не подскажете, как связать внешний Id с внутренним? Все таки они же разные будут. Пока даже теоритически не представляю как это сделать
Пока все, что придумал, это переопределять айди категорий вместе с родителем и разделять с помощью tamper
Вдруг, кому-то понадобится. Решил проблему так:
1. Вручную создал термины таксономии (позиций было не много, поэтому сделал вручную, возможно есть вариант сделать это программно с сохранением иерархии, но я даже искать не стал)
2. В Tamper Feeds выбрал Find and replace и каждому внешнему id термина, прописал внутренний id.
3.Срарсил id категорий с Feeds xPath
Решено. Спасибо @bumble и @Orion76 за наводку про внешний id.