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

Ric*_*nop 5 php dom

所以这不起作用:

        foreach ($element->attributes as $attribute) {
            $element->removeAttribute($attribute->name);
        }
Run Code Online (Sandbox Code Playgroud)

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

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

        $attributesCopy = clone $element->attributes;
        foreach ($attributesCopy  as $attribute) {
            $element->removeAttribute($attribute->name);
        }
Run Code Online (Sandbox Code Playgroud)

仍然只删除第一个属性.

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

Jon*_*Jon 11

只是:

$attributes = $element->attributes;
while ($attributes->length) {
    $element->removeAttribute($attributes->item(0)->name);
}
Run Code Online (Sandbox Code Playgroud)

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