XSLT中如何调用模板 xsl:call-template用法

13次阅读

xsl:call-template用于显式调用命名模板,依赖name属性而非match匹配,支持传参(xsl:with-param)、默认值及空序列处理,不支持自身递归,适用于工具函数类逻辑;而xsl:apply-templates基于匹配规则声明式分发,适用于结构化遍历。

XSLT中如何调用模板 xsl:call-template用法

xsl:call-template 用于在 XSLT 中显式调用一个已定义的命名模板(xsl:template),它不依赖匹配规则,而是靠名字触发,适合复用逻辑、封装通用处理过程。

必须配合 name 属性使用

被调用的模板必须用 name 属性定义名称,不能只靠 match。例如:

       

这个模板无法通过 apply-templates 自动匹配,只能靠 call-template 主动调用。

支持传参:用 xsl:with-param

调用时可向模板传递参数,参数名需与模板内 xsl:param 一致:

    

  • 若未传参,且 xsl:param 设有 select 默认值,则取默认值
  • 若未传参也无默认值,参数值为 empty sequence(空序列)
  • 参数按名称绑定,不按顺序,所以名称拼写必须完全一致

不能递归调用自身(除非用 xsl:apply-templates)

xsl:call-template 不支持直接递归(即模板里再 call 自己的名字),XSLT 1.0/2.0 均会报错。如需递归,应改用 apply-templates 配合 match + 条件终止,或用 XSLT 3.0 的 xsl:iterate 或函数(xsl:function)替代。

和 xsl:apply-templates 的核心区别

  • call-template 是“命令式”调用:你指定名字,它就执行,不关心当前上下文节点是否匹配
  • apply-templates 是“声明式”分发:根据当前节点,查找匹配的 match 模板,自动选择并应用
  • 前者适合工具函数类逻辑(如格式化、计算、生成固定结构),后者适合基于 xml 结构的遍历处理

text=ZqhQzanResources