如何使用XSLT获取嵌套HTML表的行

我试图使用XPath / XSLT从X
HTML获取表行.我的示例xhtml看起来像这样:

<body>
<....>
   <table>
     <tbody>
       <tr>
         <td/>
         <td/>
         <td>
            <table>
              <tr>
                <....>
              </tr>
            </table>
         </td>
       </tr>
     </tbody>
   </table>
</body>

在上述结构中,< tbody>可能存在也可能不存在.表可以嵌套到任何级别.现在我想获取给定表的所有行.因此,当我处理外部表时,我想只获取外部行(一个包含3个tds)而不是内部tr(在嵌套表中).如何使用XSLT或XPath执行此操作?

编辑:我基本上寻找的是一种获取节点x的所有后代:: y的方法,但y不应该是另一个x的后代.来自x-> y的路径不应包含另一个x.我可能没有任何区别外部x和内部x的东西.

注意:我正在尝试使用许多具有不同结构的HTML来执行此操作,并且我无法更改任何HTML文件的结构 – 它是给我的.唯一的问题是它们都是格式良好的XHTML.

谢谢你的帮助.

最佳答案

What I am essentially looking for is a way of getting all
descendant::y for a node x, but y should not be a descendant of
another x.

假设$n是名为x的元素.你要:

$n//y[count(ancestor::x) = count($n/ancestor-or-self::x)]

这将选择所有y为$n的后代,并且具有如此数量的x个祖先,这些祖先恰好比$n的祖先:: x的数量大一个.

因为$n包含一个x元素,这意味着对于所有选定的y,$n中包含的x是它们的第一个祖先:: x.

出于实际目的,您只需要使用精确的XPath表达式替换上面的$n,该表达式选择它包含的x元素.

点赞