2016-02-18 76 views
1

我知道,我们可以通过选择多个元素:Jsoup选择多个查询/ Jsoup select中是否有OR操作?

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

但我怎么能选择这样的事情:内部MyClass的和

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

我想选择两个(P,H2)( p>一个)的内部MyClass的

如果我只使用

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

I C注意获取内部p的内容。

我该怎么做?

+0

通过一些代码片段解释..以及要解析的示例html .. – ELITE

回答

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让其他运营商可能的含义。