我知道我们可以使用以下方法选择多个元素:
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的内容。
我该怎么做?
答案 0 :(得分:0)
您假设doc.select("div.myclass > p,h2");
将选择(p元素旁边)仅h2
元素作为div
类myclass
的直接子元素,这是不正确的。 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
的输出中包含的h2
元素不是div
的子元素。
要选择p
内的所有div.myclass
元素,即使它们不是直接子元素,也可以使用空格运算符:
Elements ps = doc.select("div.myclass p");
这将导致以下输出使用上面示例中的html:
<p>p2</p>
<p>p3</p>
查看JSoup documentation以了解其他可能的运营商的含义。