Доброго времени суток. В кратце опишу ситуацию: есть xml прайс-лист в котором необходимо добавить и изменить параметры. Есть скрипт которая скачивает прайс лист , тянет ноды xml документа, в цикле для каждого товара (оффера) добавляет ид и сохраняет в папку на сервере. Мне понадобилось что бы в определенных тегах скрипт вырезал картинку. Для этого я использую регулярку и сл. код : PHP: $patern = "/(<img.*?>)/"; preg_replace($patern, " ", $string); Регулярка на тестах работает. Теперь проблема: в цикле я прокручиваю все ноды прайс-листа. Для каждого товара добавляю ид и во всех тегах <param> в значениях тега вырезаю картинку (если есть). Но в сохраненном файле в строке все равно есть тег картинки. Пример кода который вырезает картинку(не кидайте тапками, это по сути набросок): PHP: patern = "/(<img.*?>)/"; $dom = DOMDocument::loadXML($data, LIBXML_PARSEHUGE); $i = 0; $offer_nodes = $dom->getElementsByTagName('offer'); foreach ($offer_nodes as $offer) { ++$i; $offer->setAttribute('id', (int)$i); $params = $offer->getElementsByTagName('param'); if (true == $params) { foreach ($params as $param) { $string = $param->nodeValue; $new_param = preg_replace($patern, " ", $string); $param->nodeValue = $new_param; } } } $xml = $dom->saveXML(); 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): <param name="Артикул">FLP 844092B1</param><param name="Страна регистрации бренда" id="108739" valueid="">Украина <img src='//i1.rozetka.ua/pages/47/47927.jpg' border='0' />test!</param><param name="Формат времени" id="110643" valueid="">12 ч</param>
Патерн рабочий. В xml документе теги < > указаны как символы ASCII . Если применить первый патерн регулярки к строке, которую я привел в первом месседже - все ок
@voron121, дело в том, что (DOMDocument::getElementsByTagName) Для замены узла есть метод DOMNode::replaceChild