2016-02-18 118 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讓其他運營商可能的含義。