2016-01-08 3 views
2

Я использую JSoup, чтобы попытаться получить несколько значений веб-сайт, который имеет «Luckely» только 1 TBODY тег и является построить так:JSoup получают несколько значений с помощью цикла

<tbody> 
<tr> 
    <td>2015</td> 
    <td>November</td> 
    <td class="no-border-left"></td> 
    <td class="no-border-left">&euro; 15,90</td> 
    <td> 
    <a href="/Invoice/Download?invoiceNo=2632992" target="_blank"><img alt="" src="/Content/Images/pdf_icon.png" /></a>        </td> 

    </tr> 
    <tr> 
    <td>2015</td> 
    <td>Oktober</td> 
    <td class="no-border-left"></td> 
    <td class="no-border-left">&euro; 16,20</td> 
    <td> 
    <a href="/Invoice/Download?invoiceNo=2445473" target="_blank"><img alt="" src="/Content/Images/pdf_icon.png" /></a> 
    </td> 
</tr> 
     .... 
</tbody> 

Мне нужно, чтобы получить все год (2015), месяц (ноябрь), сумма (€ 15,90) и ссылку (A HREF =)значения через петлю, как они будут добавлены в виде списка.

У меня уже есть код, но почему-то я застрял в получении суммы. Я также хотел бы использовать значения «link» позже, чтобы загрузить еще несколько вещей.

Может ли кто-нибудь взглянуть и посмотреть на меня немного? Спасибо.

.... 
Elements Tbody = doc.select("TBODY"); 
    for (Element p : Tbody) { 

    Iterator<Element> postIt = p.select("td").iterator(); 
     String YeaR = postIt.next().text(); 
     String MontH = postIt.next().text(); 

     postIt.next(); 
     postIt.next(); 

     Element amount = doc.select("td.no-border-left").first(); 
      String amounT = amount.text(); 

     Element hrefs = doc.select("a[href]").first(); 
      String linK = hrefs.text(); 
    } 
    .... 

ответ

0

Хорошо, мне удалось решить эту проблему. Если кто-нибудь есть такая же проблема, вот рабочий код:

try { 
    CharSequence cs1 = "€"; 

    is = getActivity().getAssets().open("test.htm"); 
    Document doc = Jsoup.parse(is, "UTF-8", "http://example.com/"); 
    Elements rows = doc.select("tr"); 

     for (int i = 1; i < rows.size(); i++) { 

     Element row = rows.get(i); 
     Elements cols = row.select("td"); 
     Elements links = row.getElementsByTag("a"); 

     String YeaR = cols.get(0).text(); 
     //Log.e("JSOUP: ", YeaR); 
     String MontH = cols.get(1).text(); 
     //Log.e("JSOUP: ", MontH); 

      for (Element tes : cols) 
       if (tes.text().contains(cs1)) { 
        String amounT = tes.text(); 
        //Log.e("JSOUP: ", amounT); 
       } 
        for (Element link : links) { 
         String url = link.attr("href"); 
         //Log.e("JSOUP: ", url); 
        } 
      } 

      if (is != null) 
       is.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
    } 

Это дает выход:

E/JSOUP:: 2015 
E/JSOUP:: November 
E/JSOUP:: € 15,90 
E/JSOUP:: /Invoice/Download?invoiceNo=2632992 
E/JSOUP:: 2015 
E/JSOUP:: Oktober 
E/JSOUP:: € 16,20 
E/JSOUP:: /Invoice/Download?invoiceNo=2445473 
0

бит поздно, чтобы ответить, но я хотел бы сделать это так:

Document doc = Jsoup.parse(myHtml); 

Elements tableRows = doc.select("tbody > tr"); //get all the tr elements in the table 

for (Element tableRow : tableRows) { //iterate over all the table rows (tr elements) 
    String year = tableRow.child(0).text() //get the first td in the row, with the year, and get the text. 
    String month = tableRow.child(1).text(); 
    String price = tableRow.child(3).text() 
    String link = tableRow.children().select("a").first().attr("href"); //get the link (a), and then get the href attribute. You can also use abs:href to get an absolute url 
} 
+0

thx для добавления. У вас меньше кода, но он не принимает всех значений за год, месяц, цену. Однако он принимает все ссылки. Mine - это немного больше кода, но он выполняет задание так, как планировалось. – Simon

+0

@Simon, Действительно, я не пробовал это полностью, но хорошо, что у вас есть решение, работающее в любом случае. – JonasCz

Смежные вопросы