Jsoup选择多个查询/ Jsoup select里面有OR操作吗?

时间:2016-02-18 05:16:59

标签: java select jsoup

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

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的内容。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您假设doc.select("div.myclass > p,h2");将选择(p元素旁边)仅h2元素作为divmyclass的直接子元素,这是不正确的。 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以了解其他可能的运营商的含义。