Как заменить элемент в DOMDocument

$html = '<a href="/111/" class="elt zi2" title="Ston" target="_blank">Star</a>
текст
<a href="/3233/" class="elt zi2" title="Ston" target="_blank">Star</a>';

if($html) {
    ($dom = new DOMDocument)->loadHTML($html);
    foreach ($dom->getElementsByTagName('a') as $el) {
        $dom->replaceChild('2222222222222', $el);        
    }
print_r($html);
} 

Перебираю ссылки в цикле, вопрос в том, как заменить ссылку скажем на текст?


Ответы (1 шт):

Автор решения: pgood

Для первого аргумента в replaceChild нужен объект DOMNode, для текста это будет DOMText, его можно создать методом createTextNode

<?php
$html = '<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>
<a href="/111/" class="elt zi2" title="Ston" target="_blank">Star</a>
текст
<a href="/3233/" class="elt zi2" title="Ston" target="_blank">Star</a></body></html>';

if ($html) {
    ($dom = new DOMDocument)->loadHTML($html);
    $xp = new DOMXPath($dom);
    $ns = $xp->query('//a');
    foreach ($ns as $el) {
        $el->parentNode->replaceChild($dom->createTextNode('2222222222222'), $el);
    }
    print_r($dom->saveHTML());
}
→ Ссылка