Php DOM: при настройке nodeValue код не форматируется, вместо него отображаются буквенные теги HTML

Я пытаюсь заменить одно из содержимого моего div:

  $html = new DOMDocument();
$html->loadHTML($content);

$elements = $html->getElementsByTagName('div');
foreach($elements as $element){
if($element->getAttribute('name') == "left_0"){
$element->nodeValue = "<h2>Title</h2>";
}

echo $html-> saveHTML();

Я получаю следующий вывод в моем index.php:

<h2>Title</h2>

Я искал ответ, но не могу найти способ это исправить.
Спасибо!

0

Решение

В теге с содержанием вроде: <h2>Tom</h2>, Tom это nodeValue а также h2 это nodeName,

Вы не можете писать в nodeName, Для создания нового узла вы должны будете использовать это:

$html = new DOMDocument();
$html->loadHTML($content);

$elements = $html->getElementsByTagName('div');
foreach($elements as $element) {
if ($element->getAttribute('name') == "left_0") {
$newElement = $html->createElement('h2','Tom');
$element->appendChild($newElement);
}

Если вы хотите добавить вложенные теги, как <p><h2>Title</h2></p> вы бы сделали:

$paragraph = $html->createElement('p');         // create outer <p> tag
$currentElement->appendChild($paragraph);       // attach it to parent element
$heading2 = $html->createElement('h2','Title'); // create inner <h2> tag
$paragraph->appendChild($heading2);             // attach that to the <p> tag
0

Другие решения

Внутри вашего цикла измените его на:

foreach($elements as $element) {
if ($element->getAttribute('name') == "left_0") {
$element->nodeValue = null;// removing the text inside the parent element
$h2 = new \DOMElement('h2', 'Title');// create a new h2 element
$element->appendChild($h2);// appending the new h2 to the parent element
}
}

Если вы хотите создать вложенные элементы HTML, вы будете продвигаться от последнего потомка, создавая новые DOMElement для каждого ребенка и родителя и добавление каждого ребенка к его родителю. Например:

<div><h2>H2<h2/></div>

Вы бы поместили это в свой цикл:

$parentDiv = new \DOMElement('div', null);// the outer div
$childH2 = new \DOMElement('h2', 'H2');// the inner h2 tag
$parentDiv->appendChild($childH2); // append the h2 to div
$element->appendChild($parentDiv); // append the div with its children to the element

И да, когда вы выводите, вы должны использовать $html->saveHTML().

Надеюсь это поможет.

1

По вопросам рекламы [email protected]