XPath选择不在给定元素的路径上的顶级元素

时间:2015-09-02 16:01:59

标签: xml xpath

假设我有一个像(

)这样的XML(子)树
  n
  |-a
  | |- b
  |-c
  | |- x
  | |- d
  |-e

鉴于我有一个选择 X 的选择器,它将选择节点 x ,如何选择不直接打开的最顶层元素(即排除其子元素)从 n x 的链?因此,对于该示例,结果应为[ a d e ]。

此外, n 不一定是文档的根,也应排除 x 的后代。

编辑:

直接删除链上的节点是微不足道的:

.//*[not(descendant::X or ancestor-or-self::X)]

所以问题就变成了:给定一个返回一些断开连接的树的XPath,如何获取每个树的根节点。

编辑2:

由于人们对以下原因感兴趣:我正在测试一个带有第三方窗口小部件的网站,该窗口小部件应该生成一个树<n><c><x>...</x></c></n>给定容器节点 n 和内容 x < / em>的。这里 c 可以是一个或多个级别的元素。

现在,在某些情况下,窗口小部件会生成比所需更多的标记(例如 c x 的兄弟姐妹),我的测试应选择这些元素并报告。

1 个答案:

答案 0 :(得分:1)

想出来:

.//*[not(descendant::X or ancestor-or-self::X)][parent::*[descendant::X]]