背景信息:我使用来自 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不返回布尔值,而是返回 DOMAttr 对象。
问题:这是 php.net 手册中的错误还是我做/理解有问题?
它现在有效,但很高兴知道为什么它只能以这种方式工作。谢谢先进