如何使用jsoup解析嵌套表

时间:2012-06-10 08:24:46

标签: jsoup

如何使用jsoup提取直接有两个“td”标签的“tr”标签。

示例html

<table>
  <tr> <!-- I don't want to extract this tr -->
    <td> 
      <table>
        <tr><td>extract</td><td>extract</td></tr> <!-- I want extact this tr -->
        <tr><td>extract</td><td>extract</td></tr> <!-- I want extact this tr -->
      </table>      
    </td>
  </tr>
</table>

我尝试使用此查询提取。但我有3个tr标签。

doc.select("tr:has(td:eq(1))")

2 个答案:

答案 0 :(得分:2)

您是否尝试过关注查询doc.select("tr tr")

此查询应选择您评论的所有表格行。

答案 1 :(得分:1)

//我希望这对你有帮助........你可以看到这样的输出:a b c d / n e f g h存储在内表的td标签中。

       String input = "<table><tr><td >TD1</td><td>td1</td> <td ><table><tr><td >a</td><td>b</td> <td >c</td><td>d</td></tr><tr><td>e</td><td>f</td><td >g</td><td>h</td></tr></table></td><td>td1</td></tr><tr><td>TD2</td><td>tD2</td><td >Td2</td><td>td2</td></tr></table>";

     Document doc = Jsoup.parse(input);

    Elements tables = doc.select("table tr td:has(table)");

    for (Element table : tables) {

        Elements trs = table.select("tr");

        String[][] trtd = new String[trs.size()][];

        for (int a = 0; a < trs.size(); a++) {

            Elements tds = trs.get(a).select("td");

            trtd[a] = new String[tds.size()];

            for (int b = 0; b < tds.size(); b++) {

                trtd[a][b] = tds.get(b).text(); 

              System.out.print( trtd[a][b] +"    ");

            }
          System.out.println( );
        }

        // trtd now contains the desired array for this table
    }
}

}