За последние 24 часа нас посетили 20504 программиста и 1010 роботов. Сейчас ищут 356 программистов ...

Не изменяется значение ноды DOMDocument

Тема в разделе "Прочие вопросы по PHP", создана пользователем voron121, 16 апр 2019.

  1. voron121

    voron121 Активный пользователь

    С нами с:
    18 ноя 2016
    Сообщения:
    29
    Симпатии:
    1
    Доброго времени суток. В кратце опишу ситуацию: есть xml прайс-лист в котором необходимо добавить и изменить параметры. Есть скрипт которая скачивает прайс лист , тянет ноды xml документа, в цикле для каждого товара (оффера) добавляет ид и сохраняет в папку на сервере.

    Мне понадобилось что бы в определенных тегах скрипт вырезал картинку. Для этого я использую регулярку и сл. код :
    PHP:
    1. $patern = "/(<img.*?>)/";
    2. preg_replace($patern, " ", $string);
    Регулярка на тестах работает.
    Теперь проблема: в цикле я прокручиваю все ноды прайс-листа. Для каждого товара добавляю ид и во всех тегах <param> в значениях тега вырезаю картинку (если есть). Но в сохраненном файле в строке все равно есть тег картинки.

    Пример кода который вырезает картинку(не кидайте тапками, это по сути набросок):

    PHP:
    1. patern = "/(&lt;img.*?&gt;)/";
    2. $dom     = DOMDocument::loadXML($data, LIBXML_PARSEHUGE);
    3.  
    4.     $i = 0;
    5.     $offer_nodes = $dom->getElementsByTagName('offer');
    6.     foreach ($offer_nodes as $offer) {
    7.         ++$i;
    8.         $offer->setAttribute('id', (int)$i);
    9.         $params = $offer->getElementsByTagName('param');
    10.         if  (true == $params) {
    11.             foreach ($params as $param) {
    12.                 $string = $param->nodeValue;
    13.                 $new_param = preg_replace($patern, " ", $string);
    14.                 $param->nodeValue = $new_param;
    15.             }
    16.         }
    17.     }
    18.  
    19.     $xml = $dom->saveXML();
    20.     file_put_contents(__DIR__."/xml_prices/list.xml", $xml );
    Если вывести в echo $new_param; то тега картинки не будет. Если вывести в echo $param->nodeValue после $param->nodeValue = $new_param; =- картинки не будет так же. ТО есть $param->nodeValue перезаписалось. Но при этом в итоговом документе будет тег картинки.

    На тесте пробовал к строке $param->nodeValue = $new_param; добавить слово TEST - в xml оно будет сохранено. То есть такое ощущение что регулярка не работает, но на тесте она работает 100%

    В общем нужен хелп, кто знает

    Пример тега с искомым значением :

    Код (Text):
    1. <param name="&#x410;&#x440;&#x442;&#x438;&#x43A;&#x443;&#x43B;">FLP 844092B1</param><param name="&#x421;&#x442;&#x440;&#x430;&#x43D;&#x430; &#x440;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x438; &#x431;&#x440;&#x435;&#x43D;&#x434;&#x430;" id="108739" valueid="">&#x423;&#x43A;&#x440;&#x430;&#x438;&#x43D;&#x430; &lt;img src='//i1.rozetka.ua/pages/47/47927.jpg' border='0' /&gt;test!</param><param name="&#x424;&#x43E;&#x440;&#x43C;&#x430;&#x442; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;" id="110643" valueid="">12 &#x447</param>
     
  2. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. $patern = "/<img.*?>/";
     
  3. voron121

    voron121 Активный пользователь

    С нами с:
    18 ноя 2016
    Сообщения:
    29
    Симпатии:
    1
    Патерн рабочий. В xml документе теги < > указаны как символы ASCII . Если применить первый патерн регулярки к строке, которую я привел в первом месседже - все ок
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360