从foreach循环中的DOMNode中删除所有属性

时间:2012-04-23 13:21:06

标签: php dom

所以这不起作用:

        foreach ($element->attributes as $attribute) {
            $element->removeAttribute($attribute->name);
        }

如果节点有2个属性,则只删除第一个属性。

我尝试克隆DOMNamedNodeMap但没有成功:

        $attributesCopy = clone $element->attributes;
        foreach ($attributesCopy  as $attribute) {
            $element->removeAttribute($attribute->name);
        }

仍然只删除第一个属性。

此问题在此解释:http://php.net/manual/en/class.domnamednodemap.php 显然它是一个功能,而不是一个bug。但是评论中没有提到解决方案。

1 个答案:

答案 0 :(得分:9)

简单地:

$attributes = $element->attributes;
while ($attributes->length) {
    $element->removeAttribute($attributes->item(0)->name);
}

由于属性集合会在删除属性后自动重新索引,因此请继续删除属性零,直到没有遗留属性为止。