修改XPath以返回两个值中的第二个

时间:2009-09-24 16:20:02

标签: xpath

我有一个返回两个项目的XPath。我想修改它以便它只返回第二个,如果超过2则返回最后一个。

//a[@rel='next']

我试过

//a[@rel='next'][2]

但这根本不会返回任何东西。我怎样才能重写xpath所以我只得到第二个链接?

1 个答案:

答案 0 :(得分:2)

找到答案 XPATH : finding an attribute node (and only one)

在我的情况下,正确的XPath将是

(//a[@rel='next'])[last()]

编辑(由Tomalak撰写) - 解释:

这将选择所有a[@rel='next']个节点,并获取整个集合中的最后一个:

(//a[@rel='next'])[last()]

这将选择所有a[@rel='next']个节点,这些节点分别是父节点的最后a[@rel='next']个节点:

//a[@rel='next'][last()]   equivalent:   //a[@rel='next' and position()=last()]

这将选择所有a[@rel='next']个节点,这些节点是父节点的第二个a[@rel='next'],每个节点都在其中(在您的情况下,每个父节点只有一个a[@rel='next'],这就是为什么你没有得到任何回报):

//a[@rel='next'][2]        equivalent:   //a[@rel='next' and position()=2]

为了完整性:这将选择所有a个节点,这些节点是每个节点的最后一个父节点所在的节点,并且只选择那些具有@rel='next'的节点(XPath谓词来自从左到右!):

//a[last()][@rel='next']   NOT equiv!:   //a[position()=last() and @rel='next']