小描述一下:
为了控制转换得到的格式:
<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>	</xsl:text>
</xsl:if>
<xsl:if test="$nodedepth=2">
<xsl:text>		</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>
这样实现类似参数传递的效果,当然也可以同时传递多个参数。