PHP Simple HTML DOMを使用して、次の HTML で Web ページを解析しています。</span>
それぞれの余分なタグに注意してください<li>
。
<li>
<span class="name">
<a href="">Link</a> asdasd
</span>
</span>
</li>
<li>
<span class="name">
<a href="">Link</a> asdasd2
</span>
</span>
</li>
私のクエリは次のとおりです。
$lis = $dom->find('li');
foreach ($lis as $li) {
$spans = $li->find('span');
foreach ($spans as $span) {
echo $span->plaintext."<br>";
}
}
私の出力は次のとおりです。
Link asdasd
Link asdasd2
-----------
Link asdasd2
-----------
ご覧のとおりfind('span')
、最初のスパンの子として 2 つのスパンが見つかり、次に見つけることができる<li>
次のスパンから値を取得し<span>
ます (たとえそれが next の子であっても<li>
)。末尾を削除</span>
すると、問題が修正されます。
私の質問は次のとおりです。
なぜこうなった?
この特定のケースをどのように解決できますか? 他のすべてはうまく機能し、スクリプトに大きな変更を加える立場にはありません。必要に応じて、DOM クエリを簡単に変更できます。
開始タグと終了タグを数え</span>
て、多すぎる場合は1つ削除することを考えています。それらは常に<span>
s であるため、正規表現で確認するスマートな方法はありますか?