2013-08-21 40 views
0

請幫助我。我用一個jsoup lib和它的方法hasClass。爲什麼Cur返回「無!」?來源頁面:jsoup hasClass返回錯誤結果

<body> 
<div class="pagenav" data-role="vbpagenav" data-pagenumber="2" data-totalpages="223" data-address="showthread.php?t=650495&amp;page=102" data-address2="" data-anchor=""> 
</div> 
</body> 

我的代碼:

Document doc = null; 
String result = ""; 
try { 
    doc = Jsoup.connect(params[0]).get(); 
    Elements body = doc.select("body"); 

    /* Navigation */ 
    String Cur = ""; 
    if (body.hasClass("pagenav")) { 
     Elements Current = body.select("div[data-pagenumber]"); 
     String Cur1 = Current.attr("data-pagenumber"); 
     int cur_page = Integer.parseInt(Cur1); 
     int next_page = cur_page + 1; 
     Cur = Integer.toString(next_page); 
    } else { 
     Cur = "none!"; 
    } 

    result = body.html() + Cur; 

} catch (IOException e) { 
    e.printStackTrace(); 
} 
return result; 

回答

1

您正在使用的方法hasClass走錯了路。

在您的選擇中,您將創建一個集合Elements body,其中包含所有body標記作爲Element對象。

public boolean hasClass(String className) 

將返回一個truefalse對任何在你的身體元素的元素的對象是否在他們的類屬性的類名。在這裏你會看到什麼是錯誤的,因爲你的收藏Elements body只包含所有的body標籤,而不是他們的子節點。 body標籤沒有將其類屬性設置爲pagenav,因此hasClass()方法將返回false


解決你的問題,你需要創建一個新的集合Elements對象爲body標籤的所有子節點,然後檢查他們是否具有類屬性設置爲pagenav

選擇body標籤的方式將需要一個雙循環,如

Elements body = doc.select("body"); 
    Elements bodyChildren = new Elements(); 
    for (Element e : body) { 
     for (Element eChild : e.children()) { 
      bodyChildren.add(eChild); 
     } 
    } 

    if (bodyChildren.hasClass("pagenav")){... 

雖然,因爲你只能有一個body標籤,它可以更有效地選擇它馬上如下

Element body = doc.select("body").first(); 
    Elements bodyChildren = new Elements(); 
    for (Element e : body.children()) { 
     bodyChildren.add(e); 
    } 

當您在bodyChildren上運行hasClass()時,以上兩種方法都會返回true

+0

這就像一個魅力。謝謝 – FARID