[英]jsoup hasClass returns wrong result
請幫幫我。 我使用一個jsoup lib及其方法hasClass
。 為什么Cur
返回“無!”? 源頁面:
<body>
<div class="pagenav" data-role="vbpagenav" data-pagenumber="2" data-totalpages="223" data-address="showthread.php?t=650495&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;
您使用錯誤的方法hasClass
方法。
在您的選擇中,您將創建一個包含所有body
標簽作為Element
對象的Elements body
Element
集合。
public boolean hasClass(String className)
將返回關於您的Elements主體中的任何Element對象在其class屬性中是否具有類名稱的true
或false
。 在這里,您將看到問題所在,因為集合Elements body
僅包含所有body
標簽,而不包含其子節點。 您的body
標簽沒有一個將其class屬性設置為pagenav
,因此hasClass()
方法將返回false
。
要解決您的問題,您將需要為body
標簽的所有子節點創建一個新的Collection Elements
對象,然后檢查它們的class屬性是否設置為pagenav
。
以您的方式選擇主體標簽將需要一個雙循環,例如
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")){...
不過,由於您只能擁有一個身體標簽,因此按以下方法立即選擇它會更有效
Element body = doc.select("body").first();
Elements bodyChildren = new Elements();
for (Element e : body.children()) {
bodyChildren.add(e);
}
在bodyChildren
上運行hasClass()
時,上述兩種方法都將返回true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.