PHP DOM:设置节点值时,不格式化代码,而是将显示字面的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>

我正在寻找答案,但找不到解决方法。谢谢!

在您的循环中将其更改为:

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()

希望这会有所帮助。

在标签中具有以下内容: <h2>Tom</h2>TomnodeValueh2nodeName

您不能写入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

相关内容

  • 没有找到相关文章

最新更新