使用DOMDocument,是否可以获取某个DOM中存在的所有元素?

时间:2014-04-24 12:35:27

标签: php parsing html-parsing domdocument

我们说我有一个包含许多不同元素的HTML文件,每个元素都有不同的属性。我们之前说我不知道​​这个HTML会是什么样子。

使用PHP的DOMDocument,我如何迭代所有元素并修改它们?我所看到的只是getElementByTagName和getElementById等。我想遍历所有元素。

例如。让我们说HTML看起来像这样(只是一个例子,实际上我不知道结构):

$html = '<div class="potato"><span></span></div>';

我希望能够进行一些简单的DOM修改(比如在Javascript中):

$dom = new DOMDocument();
$dom->loadHTML($html);

// Obviously the code below doesn't work but showcases what I want to achieve
foreach($dom->getAllElements as $element ){
    if(!$element->hasClass('potato')){
       $element->addClass('potato');
    } else{
       $element->removeClass('potato');
    }
}
$html = $dom->SaveHTML();

所以在这个例子中,我希望生成的html看起来像这样:

    $html = '<div><span class="potato"></span></div>';

那么如何迭代所有元素并在foreach循环中动态修改?我真的不想使用正则表达式。

1 个答案:

答案 0 :(得分:26)

您可以使用getElementsByTagName()传递一个星号*,它会返回所有元素:

foreach($dom->getElementsByTagName('*') as $element ){

}

来自Manual

  

命名
  要匹配的标记的本地名称(没有名称空间)。特殊值*匹配所有标签。