C#发现之旅 - 高性能ASP.NET树状列表控件(中)
2010-09-30 21:03:16 来源:WEB开发网编制 袁永福 2008-1-29
-->
<xsl:output method="html" indent="no" />
<!-- ***************** 主模板,为XSLT转换的入口点 ******************** -->
<xsl:template match="/*">
------------- 主模板的内容 -----------------------
</xsl:template>
<!-- ******************* 输出一个树状列表节点 *************************** -->
<xsl:template name="TreeNode">
-------------- 子模板的内容 ----------------------
</xsl:template>
</xsl:stylesheet>
这里使用了xsl:output指令
<xsl:output method="html" indent="no" />
表明此XSLT转换生成是HTML代码,而且不进行缩进处理。
该XSLT模板文档定义了两个XSLT模板,一个是默认模板,还有一个名为“TreeNode”的子模板。默认模板内容为
<!-- ***************** 主模板,为XSLT转换的入口点 ******************** -->
<xsl:template match="/*">
<!-- 定义一个NodeID变量,表示当前节点的编号 -->
<xsl:variable name="NodeID">
<xsl:choose>
<xsl:when test="string-length( @RootID ) > 0 ">
<xsl:value-of select="@RootID" />
</xsl:when>
<xsl:when test="string-length(ID) > 0">
<xsl:value-of select="ID" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="generate-id( . ) " />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- 若有子节点则显示子节点 -->
<table border="0" cellspacing="0" cellpadding="0">
<xsl:attribute name="id">
<xsl:value-of select="concat( $NodeID , '_table' ) " />
</xsl:attribute>
<xsl:for-each select="Node">
<xsl:call-template name="TreeNode">
<xsl:with-param name="Level">1</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</table>
</xsl:template>
主模板是XSLT转换的入口处,在主模板中,首先创建了一个名为NodeID的XSLT参数,若定义了树状列表的根节点则创建table元素,然后循环遍历所有的根节点,并对每一个列表节点元素调用TreeNode模板,并传递了一个名为Level的值为1的参数,表示生成的节点层次数。这样就开始了递归创建HTML元素的过程。
更多精彩
赞助商链接