4

我试图始终使用单个 Jsoup select() 语句找到后面的第一个,最好不循环。 <ul><h2>

例如,它<ul>可以是<h2>以下 HTML 片段中所示的兄弟:

<!-- 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 回答