Используя DOMDocument, можно ли получить все элементы, которые существуют в пределах определенной DOM?

Скажем, у меня есть 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-loop? Я действительно не хочу использовать regex для этого.

Ответы

Ответ 1

Вы можете передать звездочку * с getElementsByTagName(), которая возвращает все элементы:

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

}

Из Manual:

имя
Локальное имя (без пространства имен) тега для соответствия. Специальное значение * соответствует всем тегам.