Php DOM: 设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签
Php DOM: when setting nodeValue, code is not formatted, literal HTML tags get displayed instead
我正在尝试替换我的 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>
我一直在寻找答案,但找不到解决方法。
谢谢!
在包含以下内容的标签中:<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
在您的循环中将其更改为:
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()
。
希望对您有所帮助。
我正在尝试替换我的 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>
我一直在寻找答案,但找不到解决方法。 谢谢!
在包含以下内容的标签中:<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
在您的循环中将其更改为:
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()
。
希望对您有所帮助。