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

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 主动调用。

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

下载

支持传参:用 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 结构的遍历处理

https://www.php.cn/faq/1996084.html

发表回复

Your email address will not be published. Required fields are marked *