加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:40:46 所属栏目:百科 来源:网络整理
导读:我在XPath上尝试使用 python-selenium. 我使用this link从教程中尝试了一些XPath: 所以我尝试了XPath的这两个变体. 这个表达 //webengagedata//preceding-sibling::* 返回14结果 这个表达 //webengagedata/preceding-sibling::* 返回9结果 “//”与另外5个
我在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的任何后代元素的兄弟元素之前 – 与前面的示例不同,文本节点不符合条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读