7

我有一个这样的 XML

<div class="yay">
 <div class="foo"></div> 
 <div class="foo"></div>
 <div class="bar"></div>
 <div class="foo"></div>
 <div class="bar"></div>
 <div class="foo"></div>
</div>

有没有办法选择类为“foo”的第 n 个 div?

我会选择所有的 foos//div[@class="yay"/div[@class="foo"]

如果我想选择 foo #3 我该怎么做?就像是:

//div[@class="yay"/div[@class="foo"][3]?

4

2 回答 2

25

这是 XPath 中最常见的问题之一

使用

(//div[@class="yay"]/div[@class="foo"])[3]

说明

XPath 伪运算符//的优先级(优先级)低于[]运算符。

因此

//div[@class="yay"]/div[@class="foo"][3]

意思是

选择每个divclass属性具有值"foo"且 (the div) 是其 parent 的第三个这样div的孩子

如果有多个父div元素具有三个或更多这样的子元素,则选择所有第三个子元素。

与许多表达式语言一样,覆盖内置优先级的方法是使用括号

于 2012-05-16T03:18:31.207 回答
0

这对我有用,所以您是正确的,//div/div[@class="foo"][2]或者您是否想选择“yay”下的元素编号 3 并查看它是否为“foo”?

于 2012-05-16T00:46:57.077 回答