从DOMElement中删除属性仅在向后迭代时有效

时间:2013-06-18 13:53:30

标签: php attributes domdocument

背景信息:我使用来自Ubuntu 13.04存储库的PHP5.4.9。我的代码的目的是递归地迭代HTML源代码(作为DomDocument)并清理在Epub文件中无效的所有内容(即属性对齐对Epubs中的段落无效)。

示例输入:

<p lang="de" class="foo" style="align: left;">... some content ...</p>

期望的输出:

<p class="foo">... some content ...</p>

1 :今天我尝试使用这个简单的代码从DOMElement删除属性:

<?php
for ( $k=0; $k < $element->attributes->length; $k++) {
    if( /* some rule */ ){
        var_dump( $element->attributes->item($k)->nodeName);
        $element->removeAttributeNode( $element->attributes->item($k));
    }
}
?>

不幸的是,当这个循环结束时,所有属性仍然存在,即使这些var_dumps告诉我尝试删除它们。

我解决了这个问题,向后迭代属性列表:

<?php
for ( $k = $element->attributes->length - 1; $k >= 0; --$k) {
    if( /* same rule */ ){
        var_dump( $element->attributes->item($k)->nodeName);
        $element->removeAttributeNode( $element->attributes->item($k));
    }
}
?>

问题:任何想法为什么它只能在向后迭代时起作用?


2 DOMElement::removeAttributeNode不返回bool而是返回DOMAttr对象。

问题:这是php.net手册中的错误还是我在做/理解错误了?


它现在有效,但知道为什么它只是这样工作会很棒。 先谢谢你了

0 个答案:

没有答案