web-dev-qa-db-ja.com

DOMDocumentを使用して、特定のDOM内に存在するすべての要素を取得することは可能ですか?

それぞれが異なる属性を持つ多くの異なる要素を持つHTMLファイルがあるとしましょう。このHTMLがどのように表示されるかを事前に知らないとしましょう。

PHPのDOMDocumentを使用して、[〜#〜] all [〜#〜]要素を反復処理して変更するにはどうすればよいですか?表示されるのはgetElementByTagNameやgetElementByIdなどだけです。すべての要素を反復処理したいと思います。

例えば。 HTMLが次のようになっているとしましょう(単なる例ですが、実際には構造がわかりません)。

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

(Javascriptのように)いくつかの簡単なDOM変更を行えるようにしたい:

$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ループでその場で変更を行うことができますか?私は本当にこれに正規表現を使いたくありません。

16
Weblurk

アスタリスク_*_を getElementsByTagName() で渡すと、すべての要素が返されます。

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

}
_

手動 から:

名前
一致するタグのローカル名(名前空間なし)。特別な値*はすべてのタグに一致します。

28
MrCode