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()] 这两个写法,再注意括号控制作用域,就能准确抓取首尾节点了。









