2016-12-27 50 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'です。しかし、それは決して**決して「無効」になるでしょう。 * empty * 'Elements'が返されます。したがって、 'null 'をチェックする代わりに' isEmpty() 'または' size() 'を使用してください。これに加えて、あなたの答えはまだ正しい方法です(+1)。 – ollo

+1

@olloありがとうございます。それを見る時間はなかった。私の答えを更新しました。 –

+0

これはうまくいきます。ありがとう!! –