我试图使用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 nodex
, buty
should not be a descendant of
anotherx
.
假设$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元素.