4

単一の Jsoup select() ステートメントを使用して、できればループせずに、 の後に来る最初 のものを常に見つけようとしています。<ul><h2>

たとえば、次の HTML スニペットに示すように<ul>、兄弟にすることができます。<h2>

<!-- lots of things can come before -->

<h2 class="C" id="S3">
<button class="B">Click Me</button>
<span id="targetSpan">Target Span</span>
</h2>

<ul>
<li> List item 1</li>
<li> List item 2</li>
</ul>

<!-- lots of things can come after -->

または、 の兄弟の子孫 (必ずしも直接の子であるとは限りません!) である可能性があり<h2>ます。兄弟は、 の後の最初の兄弟要素である場合とそうでない場合がありますが、<h2>常に<ul>その後最初の要素<ul>です<h2>。例えば:

<!-- lots of things can come before -->

<h2 class="C" id="S3">
<button class="B">Click Me</button>
<span id="targetSpan">Target Span</span>
</h2>

<div>
<ul>
<li> List item 1</li>
<li> List item 2</li>
</ul>
</div>

<!-- lots of things can come after -->

簡単に見つけることができます<h2>

Element h2 = select("h2 > span#targetSpan").first().parent();

しかし、h2 を取得したら、<ul>その後の最初のものをどのように見つけるのでしょうか? (兄弟または子孫である可能性があります。私はその HTML コードを制御していません)

4

2 に答える 2

3

独自のループを回避することはできません。次の要素が見つかるまで、すべての次の要素の兄弟を反復処理する必要があります<ul>

  Element h2next = h2.nextElementSibling();
  do {
    ul = h2next.select("ul:not([class]))").first();         
  } while (h2next!=null && ul==null);
于 2012-07-09T22:55:52.473 に答える
0

おそらくあなたはメソッドを使用することができます

nextElementSibling() 

そこからULを取得します。

http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#nextElementSibling ()

于 2012-07-05T11:52:46.310 に答える