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 】
相关推荐:
IOS倒计时设置UIButton标题title的抖动问题
b2c电商网站制作流程,b2c水平综合的电商平台?
网站制作免费,什么网站能看正片电影?
如何将凡科建站内容保存为本地文件?
PHP 500报错的快速解决方法
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
北京网站制作公司哪家好一点,北京租房网站有哪些?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何用PHP快速搭建CMS系统?
如何在香港服务器上快速搭建免备案网站?
EditPlus 正则表达式 实战(3)
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
,网页ppt怎么弄成自己的ppt?
js实现获取鼠标当前的位置
如何快速生成橙子建站落地页链接?
Python图片处理进阶教程_Pillow滤镜与图像增强
Python3.6正式版新特性预览
Laravel如何创建自定义Artisan命令?(代码示例)
如何在云主机上快速搭建网站?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
iOS正则表达式验证手机号、邮箱、身份证号等
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
如何实现建站之星域名转发设置?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
js实现点击每个li节点,都弹出其文本值及修改
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Laravel怎么在Controller之外的地方验证数据
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
jQuery中的100个技巧汇总
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
原生JS获取元素集合的子元素宽度实例
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
如何在IIS中新建站点并解决端口绑定冲突?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】


//title/text())[1]