XPath 表达式中实现条件优先匹配:获取首个满足任一条件的节点
发布时间 - 2025-12-31 00:00:00 点击率:次使用 xpath 表达式 `(//*[@selected]/@value|//text())[1]` 可简洁实现“优先匹配 `@selected` 属性值,不存在时回退到任意文本节点”的逻辑,无需 javascript 多次调用 `evaluate`。
在 XPath 中,| 运算符用于合并多个节点集,其结果是按文档顺序(document order)去重并排序后的节点集合。因此,(//*[@selected]/@value|//text())[1] 的含义是:
- 先收集所有满足 //*[@selected]/@value 的属性节点(即任意位置带 selected 属性的元素的 value 值);
- 再收集所有 //text() 文本节点;
- 将二者合并为一个节点集,并按 HTML/XML 文档中实际出现顺序排列;
- 最后取第一个节点([1])——这天然保证了:若存在 @selected 对应的 @value,且它在文档中早于所有 //text() 节点,则返回它;否则返回文档中最靠前的文本节点。
✅ 正确示例(HTML 片段):
Normal
fallback text执行 (//*[@selected]/@value|//text())[1] 将返回 "primary"(来自 的 value 属性),因其节点在文档中位于 fallback text 之前。
⚠️ 注意事项:
- [1] 作用于整个联合结果集,不是分别对左右两侧取 [1](区别于某些误解);
- //text() 匹配所有文本节点(包括空白、换行),如需更精确控制,建议限定为非空文本://text()[normalize-space()];
- 若需支持更复杂的多级 fallback(如 A → B → C),XPath 2.0+ 可用序列构造器配合 ? 安全调用(如 SaxonJS 中):
(//*[@selected]/@value, //*[contains(@class,'main')]/@data-id,
//title/text())[1] - 浏览器原生 document.evaluate() 仅支持 XPath 1.0,不支持逗号序列语法(如 (A,B)[1]),因此推荐使用 (A|B)[1] 形式以确保兼容性;若需 XPath 3.1 功能(如函数式 fallback),可引入 SaxonJS。
? 总结:用 (expr1|expr2)[1] 替代多次 evaluate 调用,既简洁又高效,是 XPath 条件优先匹配的经典实践。
# javascript
# java
# html
# js
# 浏览器
# ai
# 区别
# 排列
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
,南京靠谱的征婚网站?
无锡营销型网站制作公司,无锡网选车牌流程?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel如何生成URL和重定向?(路由助手函数)
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Swift开发中switch语句值绑定模式
如何在景安云服务器上绑定域名并配置虚拟主机?
*服务器网站为何频现安全漏洞?
Laravel如何配置任务调度?(Cron Job示例)
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
如何打造高效商业网站?建站目的决定转化率
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel如何实现模型的全局作用域?(Global Scope示例)
Python制作简易注册登录系统
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何快速搭建高效WAP手机网站吸引移动用户?
JavaScript实现Fly Bird小游戏
Laravel如何使用Livewire构建动态组件?(入门代码)
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel安装步骤详细教程_Laravel环境搭建指南
如何用狗爹虚拟主机快速搭建网站?
如何在阿里云通过域名搭建网站?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
linux top下的 minerd 木马清除方法
如何快速搭建高效简练网站?
jQuery validate插件功能与用法详解
昵图网官方站入口 昵图网素材图库官网入口
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何解决hover在ie6中的兼容性问题
Android实现代码画虚线边框背景效果
Laravel如何升级到最新版本?(升级指南和步骤)
如何快速查询网站的真实建站时间?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
微信公众帐号开发教程之图文消息全攻略
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
JavaScript Ajax实现异步通信


//title/text())[1]