Jsoup选择器 - 如何选择</p> <div>元素中的前5个<p>元素

时间:2016-06-29 15:31:29

标签: java jsoup

以下是一堆html元素:

<div class="abcdefghijk">
   <p>a</p>
   <p>b</p>
   <p>c</p>
   <p>d</p>
   <p>e</p>
   <p>f</p>
   <p>h</p>
   <p>i</p>
   <p>j</p>
   <p>k</p>
</div>

我想选择前5个<p>元素。 请帮忙!

3 个答案:

答案 0 :(得分:4)

https://jsoup.org/cookbook/extracting-data/selector-syntax我们可以了解:

  

:lt(n):找到其兄弟索引(即它在DOM树中相对于其父节点的位置)小于n的元素;例如td:lt(3)

因此,根据您的示例,您只需要select("div.abcdefghijk p:lt(5)")

演示:

String html = " <div class=\"abcdefghijk\">\r\n" + 
        "   <p>a</p>\r\n" + 
        "   <p>b</p>\r\n" + 
        "   <p>c</p>\r\n" + 
        "   <p>d</p>\r\n" + 
        "   <p>e</p>\r\n" + 
        "   <p>f</p>\r\n" + 
        "   <p>h</p>\r\n" + 
        "   <p>i</p>\r\n" + 
        "   <p>j</p>\r\n" + 
        "   <p>k</p>\r\n" + 
        "</div>";

Document doc = Jsoup.parse(html);
Elements elements = doc.select("div.abcdefghijk p:lt(5)");
for (Element el : elements){
    System.out.println(el);
}

输出:

<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<p>e</p>

答案 1 :(得分:1)

要获得预期结果,请使用第n个子选择器

:nth-child(-n+5)
select("div.abcdefghijk :nth-child(-n+5)")

https://jsoup.org/apidocs/org/jsoup/select/Selector.html

答案 2 :(得分:1)

如果你想要选择所有这些,但是对前5个做一些特别的事情,请使用Elements#subList(fromIndex, toIndex)(继承自ArrayList):

  

返回此列表中指定的fromIndex(包含)和toIndex之间的部分视图。

String html = 
    "<div class=\"abcdefghijk\">" +
        "<p>a</p><p>b</p><p>c</p><p>d</p><p>e</p>" + // get these
        "<p>f</p><p>h</p><p>i</p><p>j</p><p>k</p>" +
    "</div>";
Document doc = Jsoup.parse(html);
Elements paras = doc.select("div.abcdefghijk p");
for (Element el : paras.subList(0, Math.min(5, paras.size())) {
    System.out.println(el);
}

输出:

<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<p>e</p>