2013-10-15 53 views
0

我有一個文件,我用Jsoup解析其具有類似結構的父行:只有得到嵌套表

<body> 
     <table cellspacing="0"> 
     <tr> 
      <td>one</td> 
     </tr> 
     <tr> 
      <td>two</td> 
     </tr> 
     <tr> 
      <td> 
       <table cellspacing="0"> 
        <tr> 
        <td>inner one</td> 
        <td>inner two</td> 
        </tr> 
        <tr> 
        <td>inner three</td> 
        <td>inner four</td> 
        </tr> 
       </table> 
      </td> 
     </tr> 
     </table> 
    </body> 

沒有id的或任何的歧義頁面上的內/外部表。

我想循環遍歷每個沒有內部表的外部行。目前,我有:

Elements rows = document.select("tr"); 
for (Element row : rows) { 
... 
} 

但是,當然,我得到與表以及內部表中的行的行,所以我不能只檢查是否CURR行包含一個表,並繼續循環。

如何從主表中獲取第1行和第2行並跳過第3行及其內部行?

+0

也許你可以檢查該行的孩子,看看其中是否是一個表:http://jsoup.org/apidocs/org/jsoup/ nodes/Element.html#children() – luanjot

+0

但我不希望由'document.select(「tr」)'返回的表的行。目前,我得到主表中的第3行(整個事物作爲循環中的一行),並將兩個內部行作爲循環中的單獨行。 – bqui56

+0

然後檢查父母。他們都將有一張作爲父母的桌子,但其中一些會有兩張。那些是你想排除的,對嗎? – luanjot

回答

2

這還不是最完美的解決方案,但它的工作對我來說:

Elements rows = document.select("body > table > tbody > tr:not(:has(table))"); 
for(Element row : rows){ 
... 
} 

什麼是真正奇怪的是,我複製你的HTML,而且還要使用TBODY選擇。如果我只是做了Elements rows = document.select("body > table > tr:not(:has(table))");它什麼也收不到。

打印出來我得到的結果:

<tr> 
<td>one</td> 
</tr> 
<tr> 
<td>two</td> 
</tr>