今天我偶然发现了一个非常有趣的案子(至少对我来说是这样)。我在玩弄硒和xPath,试图获取一些元素,但却有了一种奇怪的行为:
<div class="resultcontainer">
<div class="info">
<div class="title">
<a>
some text
</a>
</div>
</div>
</div>
<div class="resultcontainer">
<div class="info">
<div class="title">
<a>
some other text
</a>
</div>
</div>
</div>
<div class="resultcontainer">
<div class="info">
<div class="title">
<a>
some even unrelated text
</a>
</div>
</div>
</div>这是我的资料。当我运行以下xPath查询时:
//div[@class="title"][1]/a因此,我得到了ALL,而不仅仅是第一个。但如果我问:
//div[@class="resultcontainer"][1]/div[@class="info"]/div[@class="title"]/a我只得到了第一个,而不是全部。
这背后有什么神圣的原因吗?
向你问好,比斯科
发布于 2009-08-10 15:19:19
我想你想
(//div[@class="title"])[1]/a这是:
//div[@class="title"][1]/a选择所有(<a>元素是'title'的子元素)具有@class of 'title'的<div>元素,这些元素是父元素的第一个子元素(在此上下文中)。这意味着:它选择了所有的。
工作XPath选择所有具有@class of 'title'的@class的<div>元素--其中的第一个元素。
谓词(方括号[]中的表达式)分别应用于与前面的位置步骤(即"//div")匹配的每个元素。若要将谓词应用于已筛选的节点集,需要使用括号明确分组。
因此,这一点:
//div[1][@class="title"]/a将选择所有<div>元素,接受第一个元素,然后通过检查@class值进一步对其进行筛选。也不是你想要的。;-)
https://stackoverflow.com/questions/1255465
复制相似问题