2009-09-24 68 views
0

我有一个返回两个项目的XPath。我想,使其只返回第二个,或者最后修改它,如果有超过2修改XPath以返回两个值中的第二个值

//a[@rel='next'] 

我试图

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

但这并不返回任何东西。我该如何重写xpath才能获得第二个链接?

+0

答案取决于什么第一个括号表达式返回。更多的上下文(即输入XML)会很有帮助。 – 2009-09-24 16:30:11

+0

因为这个原因,我改变了主意,重写了我的评论,但是SO不会让我撤销降价。 – 2009-09-24 16:31:01

+0

是的,我不喜欢这样讨厌的事情之一。 – Jagd 2009-09-24 16:35:45

回答

2

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

在我的情况下,右侧的XPath将

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

EDIT(由托默勒格) - 说明:

这将选择所有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] 

为了完整起见:此选择素TS所有a节点是最后父上下文他们每一位都是在和他们的只有那些具有@rel='next'(XPath的谓词应用于从左至右!):

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