XSL中调用模板的时候传递可变参数

出处:https://q.cnblogs.com/q/33130/

为了控制转换得到的格式:

复制代码
    <xsl:if test="count(ancestor::*)=4">
    <xsl:copy-of select="$show_lead_space_depth_4"/>
    </xsl:if>
    <xsl:if test="count(ancestor::*)=6">
    <xsl:copy-of select="$show_lead_space_depth_6"/>
    </xsl:if>
复制代码

如果深度为4或6,则拷贝show_lead_space_depth_4,实现的功能就是输出不不同数目的空格;这样的确起到了格式控制的作用。

引出的问题:
能否在调用一个模板的时候传递可变参数?

下面是一个模板,指定参数为param的name为title:

<xsl:template name="show_title" match="/"> 
<xsl:param name="title"/>  
</xsl:template>
在调用的时候需要这样:
<xsl:call-template name="show_title">
    <xsl:with-param name="title"/>
</xsl:call-template>
感觉这个xsl:param 指定似乎是多余的,可否这样,传递的参数是变化的,比如节点深度:count(ancestor::*),在模板中进行匹配:
如果参数为4,进行操作1,如果参数为6,进行操作2.
其实就是想实现这种效果:
show_leader_space();
show_leader_space(){
    if(节点深度为4) 操作1
    if(节点深度为6)操作2
}
如何实现?

解决:

定义模板如下:

<xsl:template name="show_lead_space_depth">
   <xsl:param name="nodedepth"/>
      <xsl:if test="$nodedepth=1 ">
   <xsl:text>&#x9;</xsl:text>
   </xsl:if>
      <xsl:if test="$nodedepth=2">
   <xsl:text>&#x9;&#x9;</xsl:text>
   </xsl:if>
</xsl:template>
调用模板的时候:
<xsl:call-template name="show_lead_space_depth">
    <xsl:with-param name="nodedepth" select="count(ancestor::*)"/>
</xsl:call-template>
这样实现类似参数传递的效果,当然也可以同时传递多个参数。


  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值