首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xPath奇怪行为-即使[1]集也选择所有元素

xPath奇怪行为-即使[1]集也选择所有元素
EN

Stack Overflow用户
提问于 2009-08-10 15:15:11
回答 1查看 386关注 0票数 1

今天我偶然发现了一个非常有趣的案子(至少对我来说是这样)。我在玩弄硒和xPath,试图获取一些元素,但却有了一种奇怪的行为:

代码语言:javascript
运行
复制
<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查询时:

代码语言:javascript
运行
复制
//div[@class="title"][1]/a

因此,我得到了ALL,而不仅仅是第一个。但如果我问:

代码语言:javascript
运行
复制
//div[@class="resultcontainer"][1]/div[@class="info"]/div[@class="title"]/a

我只得到了第一个,而不是全部。

这背后有什么神圣的原因吗?

向你问好,比斯科

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-10 15:19:19

我想你想

代码语言:javascript
运行
复制
(//div[@class="title"])[1]/a

这是:

代码语言:javascript
运行
复制
//div[@class="title"][1]/a

选择所有(<a>元素是'title'的子元素)具有@class of 'title'<div>元素,这些元素是父元素的第一个子元素(在此上下文中)。这意味着:它选择了所有的。

工作XPath选择所有具有@class of 'title'@class<div>元素--其中的第一个元素。

谓词(方括号[]中的表达式)分别应用于与前面的位置步骤(即"//div")匹配的每个元素。若要将谓词应用于已筛选的节点集,需要使用括号明确分组。

因此,这一点:

代码语言:javascript
运行
复制
//div[1][@class="title"]/a

将选择所有<div>元素,接受第一个元素,然后通过检查@class值进一步对其进行筛选。也不是你想要的。;-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1255465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档