zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    bzoj 5028小Z的加油店(D12 序列gcd)(线段树+树状数组)
    蒲公英
    [APIO2012]派遣(可并堆)(D11)
    AT1219 歴史の研究(回滚莫队)
    [USACO05DEC] 布局
    小B的询问
    [HEOI2012]采花(树状数组)(暑假D11)
    [JLOI2011]飞行路线 (暑假D3 拆点+dijkstra堆优化)
    [POI2012]FES-Festival
    [国家集训队]拉拉队排练
  • 原文地址:https://www.cnblogs.com/tech-bird/p/3618075.html
Copyright © 2011-2022 走看看