2013-08-21 39 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