gpt4 book ai didi

java - jsoup hasClass 返回错误结果

转载 作者:行者123 更新时间:2023-12-01 14:12:59 27 4
gpt4 key购买 nike

请帮帮我。我使用 jsoup lib 及其方法 hasClass。为什么 Cur 返回“none!”?源码页面:

<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的方式是错误的。

在您的选择中,您创建一个集合 Elements body,其中包含作为 Element 对象的所有 body 标记。

public boolean hasClass(String className)

将返回 truefalse 以确定 Elements 主体中的任何 Element 对象的类属性中是否包含类名称。在这里您将看到问题所在,因为您的集合 Elements body 仅包含所有 body 标记,而不包含它们的子节点。您的 body 标记均未将其 class 属性设置为 pagenav,因此 hasClass() 方法将返回 false .

<小时/>

要解决您的问题,您需要为 body 标记的所有子节点创建一个新的集合 Elements 对象,然后检查它们是否具有类属性设置为 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")){...

不过,由于您只能有一个 body 标签,因此直接选择它会更有效,如下所示

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

当您在 bodyChildren 上运行 hasClass() 时,上述两种方法都会返回 true

关于java - jsoup hasClass 返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18351207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com