xsl:template定义处理规则,xsl:apply-templates调度执行节点;前者通过match匹配并声明输出逻辑,后者通过select、mode等控制处理范围与方式,二者协同构成XSLT核心驱动机制。

xsl:template 定义“怎么处理某类节点”,xsl:apply-templates 决定“现在去处理哪些节点”——两者配合,构成 XSLT 的核心驱动逻辑。
模板(xsl:template)是规则说明书
它声明:当遇到匹配的节点时,该输出什么、怎么计算、是否递归处理子节点。
一款多用途的企业软件前端HTML模板。IT软件服务公司网站响应式单页模板。基于CSS、JS、HTML模块化原则创建的。如果您的站点不需要所有元素,那么可以轻松地删除不必要的组件。模板的代码干净,友好,注释良好。这使得编辑和自定义模板变得很容易。
- 必须有 match 属性(除非用 name 做命名模板),比如
match="book"或match="/" - match 值是 XPath 表达式,处理器靠它判断“这个模板管不管用”
- 模板内可写 HTML、文本、函数(如
),也可嵌套继续向下处理 - 多个模板可能同时匹配一个节点,XSLT 按优先级(priority)或声明顺序(后声明胜出)选一个执行
应用模板(xsl:apply-templates)是调度员
它不自己输出内容,而是告诉处理器:“请按规则,去处理我挑出来的这些节点”。
- 不写 select 时,默认处理当前节点的所有直接子节点
- 写了 select="chapter",就只处理
子元素;写 select="*" 就处理所有子元素(不含文本节点) - 加 mode="summary",就只触发带
mode="summary"的模板,实现同一节点多种输出方式 - 内部可嵌
控制顺序,或向目标模板传参
典型配合流程
以 XML 中 为例:
- 主模板
match="/"输出,然后 - 触发
match="book"模板:输出,再用(无 select)处理它的子节点 - 遇到
,匹配match="title"模板,输出文字;遇到,匹配match="chapter"模板,输出编号和标题
容易忽略的关键点
-
不等于 “复制子节点内容”——它会重新走匹配流程,没写对应模板的节点可能被跳过或走内置规则 - 没写
的模板,其子节点默认不处理(除非用了这类直接取值指令) - mode 不是可有可无的修饰,它是隔离不同处理逻辑的必要手段,尤其在 import/override 场景中
- select 表达式运行在当前上下文节点下,不是整个文档根,这点和
类似但语义不同









