2016-12-27 58 views
3

我找了有可能只得到,如果它存在的元素。否则,我会得到一个错误,因为它不存在。Jsoup获取元素,只有当它存在

以下,我有情况下:

  • 表与 “TR” 标签(例如3)。
  • 守则寻找到每一个“TR”来搜索特定的数据。如果不存在,它会查找下一个“tr”元素。在这里,如果没有更多的“tr”元素,它会发生错误。

我有什么:

Element e = doc.getElementsByClass("table table-striped table-hover nofooter-").first(); 
Element tbody = e.select("tbody").first(); 
int j = 0; 

while(tbody != null){ 
    Element tr = tbody.select("tr").get(j); //Look for the next "tr" --> HERE: error, because there is no more "tr", if string "A" not found in all existing "tr"s. 
    if(tr != null){ 
     if(string == "A"){ 
     //Do something 
     } 
     j = j+1; //Increment for looking for the next "tr" 
    } 
} 

所以我需要一个结构来检查,如果 “下一个”, “TR” 元素存在。

回答

4

的问题是,你链接多个方法一起使用,当你做:

tbody.select("tr").get(j); 

如果该语句的第一部分,tbody.select("tr"),没有返回值,你会当您尝试调用get(j)得到一个错误,因为你不能在空对象上调用方法。

相反,向上突破的方法来分隔行。

先做tbody.select("tr")和结果保存到一个单独的elements变量。然后,添加一个检查来查看元素变量是否为空。您可以通过做!elements.isEmpty()elements.size() > 0做到这一点。一旦确定该变量不为空,你可以调用变量.get(j)方法,并设置Element tr值。

生成的代码看起来类似以下内容:

while(tbody != null){ 

    Elements elements = tbody.select("tr"); 

    if(!elements.isEmpty()){ 

     Element tr = temp.get(j); 

     if(tr != null){ 
      if(string == "A"){ 
       //Do something 
      } 
      j = j + 1; //Increment for looking for the next "tr" 
     } 

    } 

} 
+1

正确类型var'的''是Elements'。然而,**不会**变为'null';然后返回* empty *'Elements'。因此,不用检查'null'是否使用'isEmpty()'或'size()'。除此之外,您的答案仍然是正确的方法(+1)。 – ollo

+1

@ollo谢谢。没有时间看这个。更新了我的答案。 –

+0

这个效果很好。谢谢!! –