我是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()可能导致它以这种方式作出反应?
谢谢,克里斯。答案 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);
}