次のサンプルHTMLコードからhref値を抽出するのは、すべてをループする場合は簡単です。そして最初のものの直後に壊れます:
<li class="parts partname parts_first">
<div id="dpdn10" uri="/public/page/part1" class="partype partstate">
<div class="ptctainer">
<div class="ptitle">
<p class="ptypead">
<span class="rtext"><a href="http://www.example.com/page/ptname.html?dv=rfirst" class="mnLabel">First</a></span>
<span class="ndx">
<a href="#" dndx="dpdn10" class="xpnd _t" style="opacity:1">Details: </a>
</span>
</p>
</div>
</div>
<div id="dpdn10_content" class="xpns">
<div class="ptctainer">
<div class="ptitle">
<p class="ptypead">
<span class="rtext"><a href="http://www.example.com/page/ptname.html?dv=rfirst" class="mnLabel">First</a></span>
<span class="ndx"><a href="#" class="xpnd">Details: </a></span>
</p>
</div>
</div>
</div>
</div>
</li>
の両方のインスタンスでhref値が同一であると想定できる場合は、確かにそれを行うことができます。上記の例のように。
ただし、これらが同一でなく、特定のアプローチ(最初または2番目のいずれか)を抽出したい場合、このアプローチは失敗します。
これにより、「ネストされた選択」を可能にするJsoupのメカニズムを検索することになります。これまで、次のような単一レベルの選択に精通してきました。
Elements links = doc.select("a[href]"); // a with href
Elements pngs = doc.select("img[src$=.png]"); // img with src ending .png
Element masthead = doc.select("div.masthead").first(); // div with class=masthead
しかし、マルチレベル選択のドキュメントや例が見つかりません。
Element link= doc.select("div.xpns.div.ptctainer.div.ptitle.p.ptypead.span.rtext");
もちろん、上記は説明のためのものであり、実際の構文ではありません。Jsoupでこのようなことが(まだ)可能かどうかはわかりません。
そのような「ネストされた選択」はJsoupに存在しますか?