XPath怎么选择第一个和最后一个节点 position()和last()


XPath中选第一个节点用[1]或[position()=1],选最后一个必须用[last()];注意括号改变作用域,如(//a)[last()]取全部a中最后一个,而//a[last()]取各父元素下最后一个a。

XPath 中选择第一个和最后一个节点,主要靠 position()last() 这两个函数配合位置谓词(即方括号 [])来实现。关键不是单独用它们,而是用在路径末尾的条件过滤中。

选第一个节点:用 [position() = 1] 或简写 [1]

这是最常用也最推荐的方式。XPath 支持两种等价写法:

  • //div[@class="item"][1] —— 简洁直观,直接取匹配到的所有 div[@class="item"] 中的第 1 个
  • //div[@class="item"][position() = 1] —— 语义更明确,但写法稍长

⚠️ 注意:[1] 是针对当前路径“结果集”的序号,不是文档中全局第 1 个。比如 //ul/li[1] 表示每个 ul 下的第一个 li(可能返回多个),而 (//ul/li)[1] 才是整个文档中第一个 li(加括号改变优先级)。

选最后一个节点:必须用 [last()]

不能写成 [position() = last()](虽然语法合法,但冗余),直接用 [last()] 更清晰高效:

  • //div[@class="item"][last()] —— 取所有匹配节点中的最后一个
  • (//ul/li)[last()] —— 加括号确保是整个结果集的最后一个 li

? last() 返回的是当前上下文节点列表的总数量,所以 [last()] 就等于取索引为总数的那个节点(即末位)。

常见误区和细节

  • 别漏括号:想取“所有 a 标签中最后一个”,写 (//a)[last()];写成 //a[last()] 是每个父元素下最后一个 a
  • position() 从 1 开始计数,不是 0
  • last() 只能在谓词中使用,不能单独写 last() 当表达式
  • 如果结果为空,[1][last()] 都不返回任何节点,不会报错

基本上就这些。用熟 [1][last()] 这两个写法,再注意括号控制作用域,就能准确抓取首尾节点了。


# 作用域  # class  # position  # ul  # li  # 第一个  # 这两个  # 的是  # 这是  # 文档  # 都不  # 就能  # 多个  # 才是  # 两种 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 如何在 ACF 中正确更新嵌套多层的 Group 字段子字段  Win11如何设置环境变量 Win11添加和修改系统与用户变量【教程】  PHP主流架构如何做单元测试_工具与流程【详解】  Win10如何更改任务栏高度_Windows10解锁任务栏调整大小  php怎么下载安装并配置环境变量_命令行调用PHP技巧【技巧】  如何将文本文件中的竖排字符串转换为横排字符串  LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现  c++ try_emplace用法_c++ map高效插入数据  php怎么下载安装后设置默认字符集_utf8配置步骤【详解】  php下载安装后swoole扩展怎么安装_异步框架支持【汇总】  MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】  如何从 Go 的 map[string]interface{} 中安全获取值  Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】  Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改  Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】  php本地部署支持nodejs吗_php与nodejs混合开发环境搭建教程【教程】  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  Mac的“调度中心”与“空间”怎么用_Mac多桌面高效管理【技巧】  Win10电脑怎么设置休眠快捷键_Windows10电源按钮功能定义  Windows10如何更改桌面图标间距_Win10注册表WindowMetrics修改  c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】  php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】  如何在Golang中使用time处理时间_Golang time时间解析与格式化方法  如何在Golang中实现并发消息队列消费者_Golang channel消息消费实践  Win11怎么关闭触摸键盘图标_Windows11任务栏系统托盘设置  Win11怎么设置触控板手势_Windows11三指四指操作自定义  如何在Golang中处理云原生事件_使用Event和Notification机制  如何使用 Python 合并文件夹内多个 Excel 文件并避免权限错误  Python装饰器设计思路_功能增强机制说明【指导】  Linux怎么禁止Root用户远程登录_Linux系统SSH加固与安全设置【教程】  如何使用正则表达式批量替换重复的“-”模式为固定字符串  c++如何连接Redis c++ hiredis库使用教程【指南】  Mac如何创建和管理多个桌面空间_Mac高效多任务处理【技巧】  Win11怎么关闭任务栏小组件_Windows11隐藏任务栏天气图标  如何在 Go 中正确反序列化 XML 多节点数组(解决仅解析首个元素的问题)  Win11怎么关闭通知中心_Windows11系统通知与专注助手设置  Win11怎么开启游戏模式_Win11优化游戏帧数性能【教程】  短链接怎么用php还原_从基础原理到代码实现教学【详解】  如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例  PyTorch DDP 多进程训练在 Kaggle 笔记本中的正确启动方式  Win11怎么更改计算机名_Windows11系统信息重命名设备教程  静态属性修改会影响所有实例吗_php作用域操作符下静态存储【教程】  如何在Golang中使用闭包_封装变量与函数作用域  Windows10系统怎么查看CPU温度_Win10性能监视器查看硬件数据  Win11怎么设置默认邮件应用_Windows11应用关联Mail设置  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Win11如何暂停系统更新 Win11暂停更新最长时限设置【步骤】  c++中如何计算坐标系中两点间距离_c++勾股定理求距离  Windows 10怎么把任务栏放在屏幕上方_Windows 10解锁任务栏并拖动位置 

 2026-01-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.