当前位置 : 主页 > 网页制作 > xml >

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

来源:互联网 收集:自由互联 发布时间:2021-06-13
我在XPath上尝试使用 python-selenium. 我使用this link从教程中尝试了一些XPath: 所以我尝试了XPath的这两个变体. 这个表达 //webengagedata//preceding-sibling::* 返回14结果 这个表达 //webengagedata/prec
我在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的任何后代元素的兄弟元素之前 – 与前面的示例不同,文本节点不符合条件.

网友评论