gpt4 book ai didi

php - 如何删除php中的子节点

转载 作者:行者123 更新时间:2023-12-04 06:10:40 25 4
gpt4 key购买 nike

我正在使用 DOMDocument PHP 中的类以删除 '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);它给了我错误

Uncaught exception 'DOMException' with message 'Not Found Error' in C:\xampp\htdocs\test\dum2.php:70 Stack trace: #0 C:\xampp\htdocs\test\dum2.php(70): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in C:\xampp\htdocs\test\dum2.php on line 70



我已经为此苦苦挣扎了很长时间,但无法弄清楚问题是什么,因为我是使用此工具的新手 DOMDocument类(class)。 'body' 元素确实包含子元素!

最佳答案

一个节点只能有一个父节点。所以我假设当你调用 $wrapperDiv->appendChild($child); 时, $child不是 $body 的 child 不再,因此 $body->removeChild($child);引发错误。

含义:您不需要删除子项,因为它已被删除。

另一方面,如果您真的想删除子项而不将它们附加到其他任何地方,则删除 $wrapperDiv->appendChild($child); .

更新:确实,如果有多个 Element 节点,则并非所有节点都被移动:http://codepad.org/8udqSNMj

要解决此问题,请尝试以相反的顺序迭代子元素:

$children = $body->childNodes;
for($i = $children->length; $i--;) {
$child = $children->item($i);
if($child->nodeName != "#text") {
$wrapperDiv->appendChild($child);
}
}

http://codepad.org/LtuJN2ZT

关于php - 如何删除php中的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com