1、根本区别
xsl:apply-templates是应用模板,此时会在众多匹配的模板中挑选一个,是一对多的关系;
xsl:call-template是调用模板,可以在不同的地方被调用多次,是多对一的关系。
2、详细区别
- 调用方式不同:
xsl:apply-templates通过match进行模板匹配,且match必须对应报文中存在的节点
xsl:call-template通过name属性进行选择,name可自行定义 - 作用范围不同:
xsl:apply-templates有作用域概念,与上下文节点有关系
xsl:call-template没有作用域概念,与上下文节点无关,主要与参数中选择的节点有关
3、总结
- xsl:apply-templates是应用模板,在使用时通过select来进行选择报文中存在的特定节点,转换器自动搜索select选择节点所对应的模板,模板必须有match属性;同一个节点,可以对应多个模板,通过mode属性进行区分
- xsl:call-template是调用模板,在使用时通过name来进行选择模板,模板中必须有name属性,且与call-template的name相同,这样才能被定位到;可以传递特定参数xsl:with-param,此时调用的模板唯一(name唯一)
- 在使用过程中,新增模块、不涉及到传递参数时,使用xsl:apply-templates方便且安全;若单单是对某个节点进行修改,则使用 xsl:call-template更加简单有效