0

背景信息:我使用来自 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));
    }
}
?>

问题:任何想法为什么它只在向后迭代时才有效?


2DOMElement::removeAttributeNode不返回布尔值,而是返回 DOMAttr 对象。

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


它现在有效,但很高兴知道为什么它只能以这种方式工作。谢谢先进

4

0 回答 0