PHP を使用してさまざまな Web ページを取得し、それらを DomDocument にロードしていますが、リーフ ノードからのみテキストを抽出する際に問題が発生しています。
たとえば、次のものがあるとします。
<html>
<body>
<div class="this_is_our_div_of_interest">
<div>
<div>
<p>Some text</p>
<div>Some <a href='#'>more</a> text</div>
<p>And <span><strong>another</strong></span> paragraph</p>
</div>
<p>Yay<p>
</div>
<div>
<h4>abcd</ph4>
xyz
<div>
</div>
<div class="we_do_not_want_those_divs">
<p>This text is not important to us</p>
</div>
</body>
</html>
ご覧のとおり、これは乱雑な入力ですが、予想される「エコーされた」出力は次のとおりです。
Some text
Some more text
And another paragraph
Yay
abcd
xyz
出力で次の点に注意してください
- 特定のタグからのみ出力を取得します (この例では
this_is_our_div_of_interest
) - これは、上記のツリーに固有の形式ではありません。これは、Web ページ tjat から取得されたものであるため、コンテンツを制御できませんが、リーフ ノードのように見えるdivやpなどのタグのコンテンツのみを表示したい
- a、span、strongなど、省略が必要なタグがいくつかあります(その他のタグはリストに追加される可能性があります)。
更新 クラスにアクセスするために xpath を使用しています。たとえば、次のコード行は、すべての子孫を個別のノードとして表示します。
$nodes = $xpath->query("//div[@class='this_is_our_div_of_interest']/descendant::*");