PHP removeChild Only删除3个元素中的2个

时间:2017-09-01 20:18:31

标签: php xml

我是PHP的新手,所以让我提前道歉。我一直在解析XML,我几乎所有的工作都归功于这里的文章,但是当我从XML中删除元素时,我看到了一些奇怪的行为。

我从Web服务中提取了一个XML并且工作得很好,现在我需要删除一个元素的每个实例,XPath已经被证明是一个挑战(对我而言)所以现在我有了这个:

$idlist = $dom2->getElementsByTagName('ELEMENTID');
foreach ($idlist as $id) {
    print "<!--"."Removing Node ".$id->nodeName."=".$id->nodeValue."-->";
    //$id->parentNode->removeChild($id);
    }

我的print作为XML注释的原因是我正在生成XML输出文件。

现在,我的XML包含三个匹配的元素,即123 - 当我有所示的代码时,它打印出所有三个的nodeName和nodeValue。但是,如果我取消注释removeChild行的东西变得很奇怪,它会删除第一个和第三个匹配元素,但不会删除第二个匹配元素。

希望我的解释有点清楚,是否有一些关于removeChild()可能导致它以这种方式作出反应?

谢谢,克里斯。

1 个答案:

答案 0 :(得分:0)

似乎经常在我放弃和发布之后发现我遇到了一个解决方案,在删除节点时似乎有一个特点,它会跳过一些,除非你倒退。

如果我使用for循环并向后穿过数组,那么一切都很好。

$idlist = $dom2->getElementsByTagName('ELEMENTID');
$length = $idlist->length;
for ($i=$length-1;$i>=0;$i--)
{
    $id = $idlist->item($i);
    $id->parentNode->removeChild($id);
}