2016-03-23 30 views
0

Sadece bir tablo verisi satırından href almakta zorluk çekiyordum. Her ne kadar çalışmayı başarabilsem de, buradaki kodumun neden işlediğine dair herhangi bir açıklama yapıp yapmadığımı merak ediyorum.jsoup öğelerinde geçiş yapma ve href'i ayrıştırma

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(); 
    } 
} 

Daha önce kullanıyordum hattı, işe yaramadı aşağıdaki gibidir:

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

Neden bu hat boş bir dize döndürür geliyor? "Tr" ile seçtiğim öğeler arasında nasıl yinelendiğimle ilgili olduğunu varsayıyorum. Bununla birlikte, Element/Öğenin nasıl yapılandırıldığına aşina değilim.

Yardımlarınız için teşekkürler!

cevap

1

Elements sadece ekstra kod <td> bir href niteliği olmadığından, bu yüzden tds.get(0).attr("href"); çalışmayacak olduğunu yazmak zorunda olduğunuz bir ArrayList<Element>

nedenidir. Muhtemelen hücre içinde bir <a> href yakalamaya çalışıyorsunuz. uzun çalışma kod söylüyor: satırdaki ilk hücreye için

, bir @href özniteliği (yani bağlantı) ile ilk elemanı almak ve onun bağlıyor @href olsun

daha net çocuk linklerine erişim göstermek için (örnek belge ile) aşağıdaki örneği deneyin:

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); 
    } 
} 
İlgili konular