【问题标题】:PHP removeChild Only Deletes 2 of 3 elements [duplicate]PHP removeChild 仅删除 3 个元素中的 2 个 [重复]
【发布时间】:2018-02-10 22:42:00
【问题描述】:

我是 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);
    }

我打印为 XML 注释的原因是我正在生成一个 XML 输出文件。

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

希望我的解释有点清楚,removeChild() 是否有什么可能导致它以这种方式做出反应?

谢谢,克里斯。

【问题讨论】:

标签: php xml


【解决方案1】:

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

如果我使用 for 循环并向后遍历数组,一切都很好。

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

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多