2013-10-15 52 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>