call-template和apply-templates

对xml模板 来说,name属性是很关键的 call-template /apply-template 的name必须要和模板的name相对应。模板相当于一个函数,可以暂时这么看。而name相当于函数名称.

简单说apply是应用,call是调用。    
用apply时,引擎自动搜索与当前select指定xpath的匹配节点相匹配的template(该template必须有属性match)并使用该template进行处理,此时需要指定的是select的path。 
用call时就跟其它语言调用函数一样,必须指定name属性,相应的,该template必须有name属性,当然,也可以在这时with-param(当然相应的模板中有对应的param才行,不过这个不强制要求)。

1)从名字区分:call-template,一次只对一个node名字有效;而apply-templates,注意是是复数,所以这个是对所有符合条件的node有效。
2)从手法上:call-template,手段是通过name;apply-templates手段是通过match。

3)使用apply调用的模板,   其中的上下文节点是与之匹配的节点。使用call调用的模板,   它没有上下文节点,参数通过param进行传递

call-template的用法

比如用到枚举型

定义

<xsl:call-template name="pollutionSource">
                  <xsl:with-param  name="source" select="ns1:PollutionSource"></xsl:with-param>
</xsl:call-template>

实现

<xsl:template name="pollutionSource">
    <xsl:param name="source" />   
    <xsl:if test="$source=0">
      <xsl:text></xsl:text>
    </xsl:if>
    <xsl:if test="$source=1">
      <xsl:text></xsl:text>
    </xsl:if>
    <xsl:if test="$source=2">
      <xsl:text>生物</xsl:text>
    </xsl:if>
    <xsl:if test="$source=3">
      <xsl:text></xsl:text>
    </xsl:if>
  </xsl:template>
原文地址:https://www.cnblogs.com/tech-bird/p/3618075.html