首页 文章

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

提问于
浏览
-7

假设我有一个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的树 . 这里c可以是一个或多个级别的元素 .

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

1 回答

  • 1

    弄清楚了:

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

相关问题