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 】
相关推荐:
网站制作报价单模板图片,小松挖机官方网站报价?
香港服务器租用费用高吗?如何避免常见误区?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何快速搭建安全的FTP站点?
如何用花生壳三步快速搭建专属网站?
js实现获取鼠标当前的位置
Python文件异常处理策略_健壮性说明【指导】
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何用免费手机建站系统零基础打造专业网站?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Android自定义控件实现温度旋转按钮效果
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
高端云建站费用究竟需要多少预算?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
昵图网官方站入口 昵图网素材图库官网入口
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel怎么为数据库表字段添加索引以优化查询
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel Fortify是什么,和Jetstream有什么关系
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何彻底删除建站之星生成的Banner?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
jquery插件bootstrapValidator表单验证详解
简历没回改:利用AI润色让你的文字更专业
如何在IIS服务器上快速部署高效网站?
如何在IIS7上新建站点并设置安全权限?
Laravel如何使用模型观察者?(Observer代码示例)
微信小程序 canvas开发实例及注意事项
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
如何用AWS免费套餐快速搭建高效网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
如何快速搭建高效香港服务器网站?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
JavaScript如何实现音频处理_Web Audio API如何工作?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
jQuery validate插件功能与用法详解
LinuxCD持续部署教程_自动发布与回滚机制
音乐网站服务器如何优化API响应速度?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】


//title/text())[1]