PDA

Показать полную графическую версию : Перенос значении в xml с помощью php


daradan
23-10-2019, 18:51
Помогите пожалуйста.
Как можно в xml файле сделать следующее с помощью php (или на другом языке):
В исходнике такие данные:
<categories>
<category id="0001">Категория1</category>
<category id="0002">Категория2</category>
<category id="0003" parentId="0001">Подкатегория1_Категорий1</category>
<category id="0004" parentId="0002">Подкатегория2_Категорий2</category>
...
</categories>

<offers>
<offer id="114400" available="true">
...
<categoryId>0001</categoryId>
...
</offer>
<offers>
<offer id="114401" available="true">
...
<categoryId>0004</categoryId>
...
</offer>
...
</offers>
А хотелось бы, чтобы было так:
<offers>
<offer id="114400" available="true">
...
<categoryId>Категория1</categoryId> // вместо <categoryId>0001</categoryId>
...
</offer>
<offer id="114401" available="true">
...
<categoryId>Категория2</categoryId> /// вместо <categoryId>0004</categoryId>, значение берет из parentId="0002", т.к. он является родителем
<parentId>Подкатегория2_Категорий2</parentId> // Добавить <parentId>, т.к. имеется в <category id="0004" parentId="0002"> и добавить значение
...
</offer>
...
</offers>
Т.е. хотелось, чтобы значения категории находились внутри offers
Спасибо.

lxa85
31-10-2019, 16:33
daradan, какой бы нибудь чуть более "развесистый файлик" для подумать.
Сходу решение не напишу, но подумаю.

daradan
31-10-2019, 21:27
какой бы нибудь чуть более "развесистый файлик" для подумать. »
Спасибо. Загрузил примерный файл для понимания. Внутри в комментариях указал более подробно.
Пока для себя временным решением сделал так:
<?php
$xmlStr = file_get_contents('source.xml');
$patterns = array();
$patterns[0] = '~<categoryId>1093</categoryId>~';
$patterns[1] = '~<categoryId>1097</categoryId>~';
$patterns[2] = '~<categoryId>1103</categoryId>~';
$patterns[3] = '~<categoryId>1095</categoryId>~';
$patterns[4] = '~<categoryId>1096</categoryId>~';
$patterns[5] = '~<categoryId>1090</categoryId>~';
$patterns[6] = '~<categoryId>1098</categoryId>~';
$patterns[7] = '~<categoryId>1099</categoryId>~';
$replacements = array();
$replacements[0] = "<categoryId>Машинки</categoryId>";
$replacements[1] = "<categoryId>Коляски</categoryId>";
$replacements[2] = "<categoryId>Коляски</categoryId>\n <subcategoryId>Для прогулки</subcategoryId>";
$replacements[3] = "<categoryId>Коляски</categoryId>\n <subcategoryId>3 в одном</subcategoryId>";
$replacements[4] = "<categoryId>Конструкторы</categoryId>";
$replacements[5] = "<categoryId>Конструкторы</categoryId>\n <subcategoryId>LEGO</subcategoryId>";
$replacements[6] = "<categoryId>Конструкторы</categoryId>\n <subcategoryId>LEGO</subcategoryId>\n <subsubcategoryId>DUPLO</subsubcategoryId>";
$replacements[7] = "<categoryId>Конструкторы</categoryId>\n <subcategoryId>LEGO</subcategoryId>\n <subsubcategoryId>City</subsubcategoryId>";
$str = preg_replace($patterns, $replacements, $xmlStr);
file_put_contents('result.xml', $str, LOCK_EX);
?>и т.д.
Но там примерно 300 строк, каждую уже вручную сделал, но хотелось бы автоматизировать процесс и более грамотно все организовать, чтобы минимизировать человеческий фактор...

Antigua
03-12-2019, 15:35
Мне вообще сложно работать с php, поэтому по нему не могу ничего путевого подсказать, а вот на Питоне другое дело. Смотри, есть ветка кодеров, где рассматривается вопрос обработки XML в Python https://myht.ru/question/337-obrabotka-xml-v-python Покури её, как говорится, войдешь быстро в курс дела. Если что будет не понятно, то пиши, я подскажу. С php не дружу, а вот по Питону подскажу, что хочешь. В меру своих скромных познаний, конечно.




© OSzone.net 2001-2012