簡體   English   中英

jsoup hasClass返回錯誤的結果

[英]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&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;

您使用錯誤的方法hasClass方法。

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

public boolean hasClass(String className)

將返回關於您的Elements主體中的任何Element對象在其class屬性中是否具有類名稱的truefalse 在這里,您將看到問題所在,因為集合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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM