如何用XPath仅统计首个class=rating-container的div内指定span的数量
问题原因解释
你遇到的问题核心是XPath的节点筛选优先级规则导致的,//div[@class='rating-container'][1] 并不是你以为的「全局范围内第一个class为rating-container的div」,它的实际匹配逻辑是:
- 首先递归查找文档内所有class为rating-container的div节点
- 然后保留在各自父节点的子节点列表中,排名第一的符合条件的div
你给出的HTML结构中,除了最顶部的那个rating-container是其父div的第一个符合条件节点外,表格每一行td内的rating-container也都是各自父td下的第一个符合条件节点,所以这四个div都会被匹配到,统计的自然就是所有div下的span总数。
正确写法
你需要用括号把全局匹配div的表达式包裹起来,强制先完成全局查找再取第一个节点,写法如下:
count((//div[@class='rating-container'])[1]//span[@class='show-for-sr'])
这个表达式的执行逻辑是:
- 先匹配文档内所有class为rating-container的div节点,形成节点集合
- 取该集合的第一个元素,也就是全局第一个符合要求的div
- 统计该div内部所有class为show-for-sr的span数量,你的示例中返回结果为5,符合预期。
内容的提问来源于stack exchange,提问作者serah
相关产品推荐
相关产品推荐

