5

したがって、これは機能しません。

        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 どうやらそれは機能であり、バグではありません。しかし、コメントで言及されている解決策はありません。

4

1 に答える 1

12

単に:

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

属性コレクションは、属性が削除されるとすぐに自動的にインデックスを再作成するため、属性がなくなるまで属性0を削除し続けます。

于 2012-04-23T13:37:25.150 に答える