2016-03-23 7 views
0

テーブルデータの行からhrefだけを取得するのに問題がありました。私はそれを働かせることができましたが、なぜ私のコードがここで動作するのか誰かが説明しているのだろうかと思います。jsoupの要素を繰り返して解析するhref

for (Element element : result.select("tr")) { 
    if (element.select("tr.header.left").isEmpty()) { 

     Elements tds = element.select("td"); 

     //The line below is what I don't understand 
     String link = tds.get(0).getElementsByAttribute("href").first().attr("href"); 

     String position = tds.get(1).text(); 
    } 
} 

動作しませんでした私は前に使っていた行は、以下の通りです:

String link = tds.get(0).attr("href"); 

なぜ、この行は空の文字列を返すのですか?私はそれが "tr"で選択したように要素を反復処理する方法と関係していると仮定しています。しかし、私は要素vs要素の構造に精通していません。

ありがとうございました!

答えて

1

Elementsは、単にあなたが<td>href属性を持っていないので、tds.get(0).attr("href");は動作しませんので、余分なコードであることを書くために抱えている理由ArrayList<Element>

です。おそらく、セル内の<a>からhrefをキャプチャしようとしています。長く、作業コードが言っている:行の最初のセルのために

、@href属性(すなわちリンク)との最初の要素を取得し、 はその属性@href取得

次の例を参考にして、子リンクへのアクセス方法をより明確にしてみてください。

Element result = Jsoup.parse("<html><body><table><tr><td><a href=\"http://a.com\" /</td><td>Label1</td></tr><tr><td><a href=\"http://b.com\" /></td><td>Label2</td></tr></table></body></html>"); 

for (Element element : result.select("tr")) { 
    if (element.select("tr.header.left").isEmpty()) { 

     Elements tds = element.select("td"); 

     String link = tds.get(0).getElementsByTag("a").attr("href"); 
     String position = tds.get(1).text(); 

     System.out.println(link + ", " + position); 
    } 
} 
関連する問題