【问题标题】:First element that comes AFTER sibling OR descendant?在兄弟姐妹或后代之后出现的第一个元素?
【发布时间】:2012-07-05 04:01:42
【问题描述】:

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

例如,<ul> 可以是 <h2> 的兄弟,如以下 HTML sn-p 所示:

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

或者它可以是&lt;h2&gt; 的兄弟姐妹的后代(不一定是直系孩子!)。兄弟元素可能是也可能不是&lt;h2&gt; 之后的第一个兄弟元素,但&lt;ul&gt;始终&lt;h2&gt; 之后的第一个&lt;ul&gt;。例如:

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

我可以轻松找到&lt;h2&gt;

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

但是一旦我有了h2,我如何找到它之后的第一个&lt;ul&gt;? (可能是兄弟或后代,我不控制该 HTML 代码)

【问题讨论】:

标签: jsoup


【解决方案1】:

您无法避免自己的循环。您必须遍历所有下一个元素兄弟,直到找到下一个 &lt;ul&gt;

  Element h2next = h2.nextElementSibling();
  do {
    ul = h2next.select("ul:not([class]))").first();         
  } while (h2next!=null && ul==null);

【讨论】:

    【解决方案2】:

    也许你可以使用方法

    nextElementSibling() 
    

    并从中获得 UL。

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

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2014-07-12
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多