如何删除php中的子节点
我在PHP中使用如何删除php中的子节点,php,dom,Php,Dom,我在PHP中使用DOMDocument类删除“body”元素的所有子节点。我的代码如下 $doc=new DOMDocument(); $doc->loadHTMLFile("a.html"); $wrapperDiv=$doc->createElement('div'); $wrapperDiv->setAttribute('class','wrapper'); $body= $doc->getElementsByTagName('body')->item(0
DOMDocument
类删除“body”元素的所有子节点。我的代码如下
$doc=new DOMDocument();
$doc->loadHTMLFile("a.html");
$wrapperDiv=$doc->createElement('div');
$wrapperDiv->setAttribute('class','wrapper');
$body= $doc->getElementsByTagName('body')->item(0);
foreach( $body->childNodes as $child)
{
if($child->nodeName != "#text")
{
$wrapperDiv->appendChild($child);
$body->removeChild($child);
}
}
$body->appendChild($wrapperDiv);
$doc->saveHTMLFile('aaa.html');
在$body->removeChild($child)代码>它给了我错误
未捕获的异常“DomeException”,在中显示消息“Not Found Error”
C:\xampp\htdocs\test\dum2.php:70堆栈跟踪:#0
C:\xampp\htdocs\test\dum2.php(70):
DOMNode->removeChild(对象(domeElement))#1{main}被抛出
第70行的C:\xampp\htdocs\test\dum2.php
我已经为此挣扎了很长一段时间,但无法找出问题所在,因为我对使用这个DOMDocument
类还不熟悉。“body”元素不包含子元素 一个节点只能有一个父节点。所以我假设当您调用$wrapperDiv->appendChild($child)时
,$child
不再是$body
的子对象,因此$body->removeChild($child)代码>抛出一个错误
意思是:您不需要删除子项,因为它已被删除
另一方面,如果您确实希望删除子项而不将其附加到任何其他位置,则删除$wrapperDiv->appendChild($child)代码>
更新:事实上,如果有多个元素节点,并非所有节点都会移动:
要解决此问题,请尝试按相反顺序迭代子元素:
$children = $body->childNodes;
for($i = $children->length; $i--;) {
$child = $children->item($i);
if($child->nodeName != "#text") {
$wrapperDiv->appendChild($child);
}
}
我已经试过了,而且效果不错。子节点不会从body元素中删除…即使在我删除$wrapperDiv->appendChild($child)时也不会删除
..@Salman:你是如何测试是否有孩子的?我已经编辑了相关的代码。html文件包含div和img标记,…hmmm…这可能是因为我使用loadHTMLFile吗?哦,请尝试放置至少两个child n,然后查看它是否适用于u或nt!!我想知道,如果你在孩子身上迭代,你怎么会不允许改变他们。