Pra*_*nth 5 xml selenium xpath
我在XPath上尝试使用python-selenium.
我使用此链接从教程中尝试一些XPath:
所以我尝试了XPath的这两个变体.
这个表达
//webengagedata//preceding-sibling::*
Run Code Online (Sandbox Code Playgroud)返回14结果
而这个表达方式
//webengagedata/preceding-sibling::*
Run Code Online (Sandbox Code Playgroud)返回9结果
"//"与另外5个结果相匹配的是什么?
/vs //一般两者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>
Run Code Online (Sandbox Code Playgroud)
对于这个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-前面的例子不同,文本节点没有资格.