以下是一堆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>
元素。
请帮忙!
答案 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)")
答案 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>