XPath 3.1 在2025年已成为主流标准,支持正则原生匹配、链式字符串清洗、条件分支、类型转换及高阶谓词迭代,使其从定位工具升级为轻量查询语言。

XPath 3.1 在2025年已成为主流支持标准,尤其在 Scrapy 2025、现代浏览器 DevTools 和智能定位插件(如 SelectorsHub)中深度集成。它不只是语法增强,而是让表达式真正具备“逻辑判断 + 文本处理 + 动态匹配”能力。
正则表达式原生支持
不再依赖 contains() 或 starts-with() 生硬拼凑,直接用 matches() 和 replace() 处理复杂文本模式:
-
//a[matches(@href, 'https?://(www\.)?baidu\.com/.*')] -
//p[replace(text(), '\s+', ' ') = '登录成功']
注意:正则需转义点号、括号等特殊字符,且默认区分大小写(加'i'标志可忽略,如matches(., 'login', 'i'))
更灵活的字符串归一化与空格处理normalize-space() 不再只是去首尾空格,还能配合其他函数做链式清洗:
-
//*[normalize-space() = '立即购买']—— 精准匹配去空格后完全一致的文本 -
//input[normalize-space(@placeholder) = '请输入手机号']—— 安全应对前后多空格或换行的属性值
条件表达式(if-then-else)和类型转换函数
可在单条 XPath 中完成分支逻辑,避免外部代码干预:
-
//div/if (@data-status = 'active') then .//span[@class='name'] else .//span[@class='desc'] -
//price[number(text()) > 99]/text()——number()自动过滤非数字内容,转换失败返回NaN,参与比较时自动为false
高阶函数与数组操作基础(为 XPath 4.0 铺路)
虽未全面引入数组类型,但已支持 for, some, every 等谓词级迭代结构:
-
//ul[some $li in li satisfies contains($li/text(), 'VIP')]—— 判断列表中是否存在含“VIP”的项 -
//table/tr[every $td in td satisfies number($td) > 0]—— 所有单元格都为正数的行
这些功能让 XPath 从“定位工具”升级为“轻量查询语言”,特别适合在 Scrapy 2025 的增强型选择器引擎、AI驱动的 Spec 模式解析层中,直接完成语义提取与条件过滤,减少后续 Python 层的数据清洗负担。










