0

如何使用 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))")
4

2 回答 2

2

您是否尝试过以下查询doc.select("tr tr")

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

于 2012-06-10T09:37:54.557 回答
1

// 我希望这对你有帮助........你可以看到这样的输出:存储在内表的 td 标记中的 abcd /nefgh。

       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
    }
}

}

于 2014-06-03T03:59:59.467 回答