removeAttributeNode который выполнил только один раз в цикле в php5 dom - PullRequest
0 голосов
/ 24 февраля 2012

Я ищу скрипт, который удаляет все атрибуты, кроме 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();

Теперь моя проблема в том, что он удаляет только первый атрибут, который является «классом». Я отладил и обнаружил, удаляю ли я строку, имеющую цикл удаленияAttributeNode, работает нормально 4 раза, но в случае использования этого цикла просто работайте один раз, удаляйте только первый атрибут и разрывы.

Кто-нибудь имел эту проблему раньше или есть решение?

1 Ответ

0 голосов
/ 14 февраля 2013

Наконец-то я запускаю код. только одно изменение, которое перемещает 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]); 
    }
}
...