java - 只获取嵌套表的父行

标签 java html parsing jsoup

我有一个正在用 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) {
...
}

但是,当然我得到的是表中的行以及内表中的行,所以我不能只检查当前行是否包含表并继续循环。

如何仅从主表中获取第 1 行和第 2 行并跳过第 3 行及其内部行?

最佳答案

这不是最优雅的解决方案,但它对我有用:

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>

关于java - 只获取嵌套表的父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379452/

相关文章:

html - 部分顶部和底部的波浪背景

python - Beautiful Soup 为特定的 div 找到 child

c++ - 即使我必须在自己的源代码上使用 RTTI,我是否可以使用 clang 来解析 C 代码?

c# - 在 C# 中使用 XmlDocument 检索值

java - 如何在不使用抽象的情况下强制在子类中实现方法?

java - 当数据来自json时, fragment 不出现

javascript - Angular : Break up a page with it's own controller

Java8 相当于 JodaTime DateTimeFormat.shortDate()

java - 在两台 Linux 系统计算机之间从 Java 调用 linux shell 命令

javascript - HTML CSS JS 键盘在移动屏幕中向上滑动时的问题