首页 新闻 赞助 找找看

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

0
悬赏园豆:40 [已解决问题] 解决于 2012-03-28 11:52

小描述一下:

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

    <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
}
如何实现?







zsounder的主页 zsounder | 老鸟四级 | 园豆:2819
提问于:2012-03-16 17:00
< >
分享
最佳答案
0

定义模板如下:

<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>
这样实现类似参数传递的效果,当然也可以同时传递多个参数。


zsounder | 老鸟四级 |园豆:2819 | 2012-03-28 11:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册