XPath中“ //”和“ /”之间的区别?

普拉桑斯

我正在尝试使用XPath for python-selenium。

我使用此链接尝试了教程中的一些XPath:

因此,我尝试了XPaths的这两种变体。

  1. 这个表达

    //webengagedata//preceding-sibling::*
    

返回了14条结果

  1. 而这个表达

    //webengagedata/preceding-sibling::*
    

返回了9条结果

“ //”如何匹配另外5个结果?

克休斯

///一般

两者child/)和descendant-or-self//)是在XPath轴

  • /是的缩写/child::node()/

    使用/选择节点的直接子

  • //是的缩写/descendant-or-self::node()/

    用于//递归选择节点,其子级,其孙级,等等。


/VS//preceding-sibling::*

您的特定问题询问//preceding-sibling::*之间的区别/preceding-sibling::*

由于您的数据是异地且复杂的,因此让我们考虑一下这种当前且更简单的XML:

<r>
  <a/>
  <b>
    <c/>
    <d/>
  </b>
</r>

对于此XML,

  1. /r/preceding-sibling::*由于r之前没有兄弟姐妹,因此不选择任何内容
  2. /r//preceding-sibling::*选择所有后代或自的前述同级元素节点r也就是说,abcd(请记住,/r//preceding-sibling::*它的缩写/descendant-or-self::node()/preceding-sibling::*不是 /descendant-or-self::*/preceding-sibling::*)。请注意,即使bd是没有元素的前辈兄弟姐妹,它们也是文本节点的前辈兄弟姐妹,因为上述XML在b之后具有空格d如果所有空白都被删除,则仅ac将被选中。
  3. /r/descendant::*/preceding-sibling::*选择所有后代的前述兄弟元素的元素rac请注意,bd没有选择,因为他们没有前面的兄弟元素,以任何后代元素r-前面的例子不同,文本节点没有资格。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章