Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Перенос значении в xml с помощью php (http://forum.oszone.net/showthread.php?t=342643)

daradan 23-10-2019 18:51 2893258

Перенос значении в xml с помощью php
 
Помогите пожалуйста.
Как можно в xml файле сделать следующее с помощью php (или на другом языке):
В исходнике такие данные:
HTML код:

<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>

А хотелось бы, чтобы было так:
HTML код:

<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 2894177

daradan, какой бы нибудь чуть более "развесистый файлик" для подумать.
Сходу решение не напишу, но подумаю.

daradan 31-10-2019 21:27 2894202

Вложений: 1
Цитата:

Цитата lxa85
какой бы нибудь чуть более "развесистый файлик" для подумать. »

Спасибо. Загрузил примерный файл для понимания. Внутри в комментариях указал более подробно.
Пока для себя временным решением сделал так:
PHP код:

<?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'$strLOCK_EX);
?>

и т.д.
Но там примерно 300 строк, каждую уже вручную сделал, но хотелось бы автоматизировать процесс и более грамотно все организовать, чтобы минимизировать человеческий фактор...

Antigua 03-12-2019 15:35 2898910

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


Время: 06:21.

Время: 06:21.
© OSzone.net 2001-