如何忽略xpath中的第一个元素

pri*_*ank 45 xpath

如何忽略第一个元素并获取其余元素?

<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">some link 2</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

谢谢

t00*_*0ny 91

如果你想忽略"first"元素,那么:

//li[position()>1]
or
(//a)[position()>1] 
Run Code Online (Sandbox Code Playgroud)

如果你想要最后一个(就像你的例子似乎暗示):

//li[last()]
or
(//a)[last()]
Run Code Online (Sandbox Code Playgroud)

  • 请记住,XPath中的索引是从1开始的,而不是从0开始的.所以表达式`a [position()> 1]`返回除第一个之外的所有`a`元素. (4认同)

Mad*_*sen 12

您可以使用position()跳过"第一个",但根据您感兴趣的元素和上下文,您可能需要稍微改变一下XPATH.

例如,如果你想要解决所有li元素并获得除第一个之外的所有元素,你可以使用:

//li[position()>1]
Run Code Online (Sandbox Code Playgroud)

并且它将按预期工作,返回li除第一个之外的所有元素.

但是,如果您想要解决所有a需要稍微修改XPATH 的元素.在表达式的上下文中,//a[position()>1]每个a元素的a position()值为1,并且last()将评估为true.所以,它总会返回每一个a,不会跳过第一个.

您需要包装选择a括号中的表达式以将它们分组到节点集中,然后在位置上应用谓词过滤器.

(//a)[position()>1]

或者,您也可以使用如下表达式:

//a[preceding::a]
Run Code Online (Sandbox Code Playgroud)

这将找到a除第一个之外的所有元素(因为在第一个元素a之前没有).