removeAttributeNode,它在php5 dom中只在循环中执行了一次

时间:2012-02-24 12:33:01

标签: php dom attributes anchor href

我正在搜索删除除锚标记中的href之外的所有属性的脚本。我发现一些脚本在我写的解决方案之后都非常相似。

$okattrs = array(
            'a' => array('href' => true),
            );

$content = '<div id="att"><a class="pl" title="hit me" id="myid" href="http://google.com" >Click On Google</a></div>';
$doc = new DomDocument();
$doc->loadHTML($content);

$a_tags = $doc->getElementsByTagName('a');
foreach($a_tags as $k => $a_tag_obj) {
    foreach ($a_tag_obj->attributes as $name => $attrNode)
    {
        if (!isset($okattrs[$a_tag_obj->nodeName][$name]))
        {
            $a_tag_obj->removeAttributeNode($attrNode);
        }
    }
}
echo    $content1=$doc->saveHTML();

现在我的问题是它只删除了第一个属性'class'。我调试,发现如果我删除行有removeAttributeNode循环工作正常4次,但如果使用此循环只工作一次,只删除第一个属性和休息。

之前有人遇到此问题或有解决方案吗?

1 个答案:

答案 0 :(得分:0)

最后我让代码运行。只有一个更改将removeAttributeNode移动到另一个循环。

foreach($a_tags as $a_tag_obj) { 
    $attribute_list = array(); 
    foreach ($a_tag_obj->attributes as $name => $attrNode) { 
        if (!isset($okattrs[$a_tag_obj->nodeName][$name])) { 
            $attribute_list[] = $name; 
        }    
    } 
    for($i=0;$i<sizeof($attribute_list);$i++) { 
        $a_tag_obj->removeAttribute($attribute_list[$i]); 
    }
}