p,h2"); // select p or h2 inside myclass 但是我怎样才能选择这样-6ren">
gpt4 book ai didi

java - Jsoup Select 具有多个查询/Jsoup select 内部是否有 OR 操作?

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:07 24 4
gpt4 key购买 nike

我知道我们可以使用以下方法选择多个元素:

doc.select("div.myclass > p,h2");  // select p or h2 inside myclass

但是我怎样才能选择这样的东西:

doc.select("div.myclass > p, h2" || "div.myclass > p > a");// this is a fake function

我想选择 myclass 内的 (p, h2) 和 myclass 内的 (p > a)

如果我只使用

doc.select("div.myclass > p");

我无法获取内部p的内容。

我怎样才能做到这一点?

最佳答案

您假设 doc.select("div.myclass > p,h2"); 将仅选择(在 p 元素旁边)属于 divmyclass 的直接子级的 h2 元素,这是不正确的。 Jsoup CSS 实现中的 , 运算符优先于 > 运算符。因此,在您的示例中,它将选择所有 h2 元素,无论它位于 DOM 中的位置。

String html = ""
+ "<h2>header1</h2>"
+ "<div class=\"myclass\">"
+ "<h2>header2</h2>"
+ " <p>p1</p>"
+ " <div class=\"myclass2\">"
+ " <p>p2</p>"
+ " </div>"
+ "</div>"
;
Document doc = Jsoup.parse(html);
Elements els1 = doc.select("div.myclass > p,h2");
System.out.println(els1+"\n");
Elements els2 = doc.select("div.myclass > p, div.myclass > h2");
System.out.println(els2+"\n");

在上面的示例中,您可以亲眼看到,els1 的输出将包含不是 div 子元素的 h2 元素。

要选择 div.myclass 内的所有 p 元素,即使它们不是直接子元素,您也可以使用空格运算符:

Elements ps = doc.select("div.myclass p");

这将导致以下输出以及上面示例中的 html:

<p>p2</p>
<p>p3</p>

看看 JSoup documentation获取其他可能的运算符的含义。

关于java - Jsoup Select 具有多个查询/Jsoup select 内部是否有 OR 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com