微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我在XPath上尝试使用 python-selenium.

我使用this link从教程中尝试了一些XPath:

所以我尝试了XPath的这两个变体.

>这个表达

//webengagedata//preceding-sibling::*

返回14结果

>这个表达

//webengagedata/preceding-sibling::*

返回9结果

“//”与另外5个结果相匹配的是什么?

解决方法

/ vs //一般

子(/)和后代 – 或 – 自(//)都是axes in XPath.

> /是/ child :: node()/的缩写.

使用/选择节点的直接子节点.
> //是/ descendant-or-self :: node()/的缩写.

使用//来选择
节点,它的子节点,它的孙子节点等等
递归.

/ vs // with preceding-sibling :: *

您的具体问题询问了// ​​prevIoUs-sibling :: *和/ preceding-sibling :: *之间的区别.

由于您的数据非现场且复杂,我们应考虑使用现有且更简单​​的XML:

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

对于这个XML,

> / r / preceding-sibling :: *什么都不选,因为r没有兄弟姐妹.> / r // preceding-sibling :: *选择前面的兄弟元素r的所有后代或自身节点.即,a,b,c和d.(请记住,/ r // preceding-sibling :: *是/ descendant-or-self :: node()/ preceding-sibling :: *的缩写,而不是/ descendant-or-self :: * / preceding-sibling: :*)请注意,即使b和d是没有元素的前任兄弟,它们也是文本节点的前任兄弟,因为上面的XML在b和d之后有空格.如果删除了空格,则只选择b和d.> / r / descendant :: * / preceding-sibling :: *选择r的所有后代元素的前一个兄弟元素.即a和c.请注意,未选择b和d,因为它们不是r的任何后代元素的兄弟元素之前 – 与前面的示例不同,文本节点不符合条件.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。