За последние 24 часа нас посетили 16623 программиста и 1650 роботов. Сейчас ищут 1750 программистов ...

замена текста в xml - PHP

Тема в разделе "PHP для новичков", создана пользователем wizand, 5 май 2017.

  1. wizand

    wizand Новичок

    С нами с:
    5 май 2017
    Сообщения:
    6
    Симпатии:
    0
    Добрый день!

    Подскажите, почему этот скрипт не работает:

    PHP:
    1. $Replacement = file('zamena.txt'); // содержит "<category id="3" parentId="0">3</category><category id="4" parentId="0">4</category>"
    2. if ($Replacement===false) {
    3.     echo 'Не удалось прочитать файл с заменами';
    4.     $Replacement = array();
    5. }
    6.  
    7. $text = file_get_contents('source.xml');
    8. $result = preg_replace_callback('~(<categories>)([^<]+)(</categories>)~i', 'my_replace_callback', $text);
    9. file_put_contents('result.xml', $result, LOCK_EX);
    10.  
    11. function my_replace_callback($m) {
    12.     global $Replacement;
    13.     static $Index = 0;
    14.     if (isset($Replacement[$Index])) $m[2] = htmlspecialchars($Replacement[$Index]);
    15.     $Index++;
    16.     return $m[1] . $m[2] . $m[3];
    17. }
    Есть файл source.xml, в нем в теге <categories></categories> находятся 20000 категорий с названиями.

    HTML:
    1. <categories></categories><category id="1" parentId="0">1</category>
    2. <category id="2" parentId="0">2</category></categories>

    Мне нужно, чтобы скрипт в этом файле вместо содержимого <categories></categories>, вставлял другое содержимое (20-30 категорий) из тестового файла zamena.txt, тоже в <categories></categories>

    Сейчас возвращается ошибка "Не удалось прочитать файл с заменами"
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Потому что не удалось прочитать файл с заменами?
     
    mkramer нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    @wizand, указывай полные пути к файлам. Получай их с помощью констант __FILE__ и __DIR__
     
  4. wizand

    wizand Новичок

    С нами с:
    5 май 2017
    Сообщения:
    6
    Симпатии:
    0
    Да, путь действительно неправильный, исправил, ошибка не появляется, новый файл создается, но замены не происходит
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    А это уже другое. Регулярка неправильная, поскольку наверняка внутри <categories /> есть вложенные теги, а ты пишешь регулярку, чтоб там не было <. Вообще, с XML надо работать как с XML, а не как с текстом. Т.е. расширениями SimpleXML, DOM и т.п.
    --- Добавлено ---
    Кстати, в приведённом в первом посте XML бред написан, он некорректен, поскольку <categories> два раза закрывается, а открыт только один раз.
     
  6. wizand

    wizand Новичок

    С нами с:
    5 май 2017
    Сообщения:
    6
    Симпатии:
    0
    ошибся, когда копировал-вставлял