XSLT中的模式匹配(match)优先级是怎么计算的
技术百科
月夜之吻
发布时间:2026-01-24
浏览: 次 XSLT模板匹配优先级由显式priority属性或match表达式特异性自动决定,数值越大或模式越具体(如带谓词、多步路径)优先级越高,且显式设置恒覆盖默认值。
XSLT中的模式匹配优先级,决定当多个 都能匹配同一个节点时,哪个模板会被实际选用。它不是靠书写顺序,而是由一套明确的规则自动计算得出——既支持显式指定,也提供默认值。
显式 priority 属性最直接
你可以在模板中直接写 `priority="1"` 或 `priority="-0.7"`: - 数值越大,优先级越高 - 显式设置的值总会覆盖默认值(哪怕只设 `priority="0.1"`,也比多数默
默认优先级按匹配表达式的“特异性”自动分配
XSLT处理器会根据 `match` 属性里的XPath模式结构,自动打分,范围是 -0.5 到 +0.5: - `*`、`text()`、`attribute()` → 默认 -0.5 - `tv:*`(带命名空间通配)、`*:Name`(本地名通配)→ 默认 -0.25 - `book`、`@id`、`element(*, xs:date)`(仅名称或仅类型)→ 默认 0 - `element(book, xs:string)`(名称+类型)、`schema-element(Invoice)` → 默认 0.25 - `book[1]`、`book/title`、`description//channel`(含谓词或多个步)→ 默认 0.5简单说:越具体、越深入、约束越多的 match 表达式,自动得分越高。
优先级比较有前提条件
- 只有 `match` 属性存在的模板才参与默认优先级计算;带 `name` 但无 `match` 的模板不参与匹配竞争 - `xsl:import` 导入的模板默认被排除在优先级比较之外(除非显式设 priority) - 如果两个模板默认分相同,XSLT规范不保证执行顺序——这时必须用 `priority` 明确区分常见误区提醒
- 不要依赖模板在文件里的先后位置——XSLT不认“先写后写” - `match="/"` 和 `match="book"` 同时存在时,`book` 节点一定走 `match="book"` 模板,因为 `/` 匹配根,不匹配 `book` 子节点(这是匹配范围问题,不是优先级问题) - 空格、换行、注释不影响优先级计算基本上就这些。不复杂但容易忽略细节。
# 这是
# 多个
# 越多
# 都能
# 你可以
# 越高
# 越大
# 总会
# 是由
# String
# 命名空间
# channel
# 处理器
# Attribute
# 默认值
# date
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么设置DNS服务器_Windows11
- Win11怎么关闭自动调节屏幕亮度_Windows
- 如何在 Go 中创建包含映射(map)的切片(sl
- windows如何修改文件默认打开方式_windo
- Win11时间不对怎么同步_Win11自动校准互联
- c++中如何使用auto关键字_c++11类型推导
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- MAC怎么使用表情符号面板_MAC Emoji快捷
- 如何开启Windows的远程服务器管理工具(RSA
- Python解释执行模型_字节码流程说明【指导】
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- Go 中实现 Python urllib.quot
- php485能和物联网模块通信吗_php485对接
- 如何在 Python 测试中动态配置 @backo
- Windows10如何重置此电脑_Windows1
- c++的static关键字有什么用 静态变量和静态
- Python日志系统设计与实现_高可观测性架构实战
- 如何在 Go 后端安全获取并验证前端存储的 JWT
- Win10怎样卸载自带Edge_Win10卸载Ed
- windows如何备份注册表_windows导出和
- 如何使用Golang管理跨项目依赖_Golang多
- Win10如何备份注册表_Win10注册表备份步骤
- Win11怎么看电池循环次数_Win11笔记本电池
- Python函数接口文档化_自动化说明【指导】
- Python网络异常模拟_测试说明【指导】
- Windows10怎么查看硬件信息_Windows
- Win11怎么设置右键刷新选项_Windows11
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Win11怎么更改计算机名_Windows11系统
- Win10如何更改开机密码_Windows10登录
- Windows10系统怎么查看设备管理器_Win1
- php能跑在stm32上吗_php在stm32微控
- c++怎么用jemalloc c++替换默认内存分
- Win10怎样安装Excel数据分析工具_Win1
- Win10电脑C盘红了怎么清理_Windows10
- Win11怎么查看显卡温度 Win11任务管理器查
- Windows如何查看和管理已安装的字体?(字体文
- Win11如何设置系统声音_Win11系统声音调整
- Win10系统更新错误0x80240034怎么办
- Windows如何拦截腾讯视频广告_Windows
- 如何使用Golang安装API文档生成工具_快速生
- Windows10电脑怎么连接蓝牙设备_Win10
- 如何用::实现单例模式_php静态方法与作用域操作
- php条件判断怎么写_ifelse和switchc
- Win11怎么设置任务栏图标大小_Windows1
- MAC如何启用访达侧边栏显示_MAC Finder
- Linux如何安装JDK11_Linux环境变量配
- c# await 一个已经完成的Task会发生什么
- php中$this和::能混用吗_对象与静态作用域
- 如何在Golang中实现并发消息队列消费者_Gol

QQ客服