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