2014-09-04 79 views
1

我正在使用JSoup進行Web報廢。我有一個類名爲.chart的表,它有行(tr),行有數據(td)。但是一些tds的表格裏面也包含行和tds。這是這些問題的TDS的一種形式:當td有內部表時,如何獲取外部td數據JSoup

<td align="center" onmouseout="hideAlt(104692)" onmouseover="showAlt(104692)"> 
21 
<div id="as104692" class="altsrc" style="height: 32px; top: 308px; left: 622px; display: none;"> 
<b>Alt Src Locations</b> 
<br> 
<table class="none" border="0"> 
<tbody> 
<tr> 
<td>Lisac's Tire Butte</td> 
<td align="right">21</td> 
</tr> 
</tbody> 
</table> 
</div> 

這就是我如何利用數據:

Elements e = manuf.select("table.chart tr"); 
      for(Element el : e) { 
       Elements columns = el.select("td"); 
       for(Element c : columns) { 
        System.out.print(c.text() + ", "); 
       } 
} 

這是結果,我得到:21個Alt鍵Src的位置Lisac輪胎小山21 這就是我想要的結果:21

我該如何告訴程序只取第一個td而不是把它們放在裏面呢?

回答

1

你可以達到你想要的ownText()組合和immediate child選擇

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class Main { 

    public static void main(String[] args) { 
     try { 
      String html = "<table class=\"chart\">" + 
          "<tr>" + 
          "<td align=\"center\" onmouseout=\"hideAlt(104692)\" onmouseover=\"showAlt(104692)\">" + 
          "21" + 
          "<div id=\"as104692\" class=\"altsrc\" style=\"height: 32px; top: 308px; left: 622px; display: none;\">" + 
          "<b>Alt Src Locations</b>" + 
          "<br>" + 
          "<table class=\"none\" border=\"0\">" + 
          "<tbody>" + 
          "<tr>" + 
          "<td>Lisac's Tire Butte</td>" + 
          "<td align=\"right\">21</td>" + 
          "</tr>" + 
          "</tbody>" + 
          "</table>" + 
          "</div>" + 
          "</td>" + 
          "</tr>" + 
          "</table>"; 

      Document doc = Jsoup.parse(html); 

      Elements els = doc.select("table.chart>tbody>tr>td"); 
      for(Element el: els) 
       System.out.println(el.ownText()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

我猜什麼的> TBODY>是隱含的,因爲代碼工作(它打印第一​​文),儘管樹的該部分沒有明確的標記。 – philwalk 2016-01-09 16:49:10

+0

其實有。 Jsoup的html解析器(默認)將添加缺少的標籤或刪除無效的標籤,以便創建它所產生的dom,從而輕鬆實現html規範。嘗試打印我的示例的'doc'變量,你會看到它。 – alkis 2016-01-09 17:28:38