XML创建可排序、分页的数据显示页面(6) <xsl:for-each select="客户"> <xsl:sort select="序号" order="ascending"/> </xsl:for-each> 我们可以改变成这样的形式: <xsl:for-each select="./*"> <xsl:sort select="./*[1]" order="ascending"/> </xsl:for-each> 这里"./*"表示你应当包含进去当前节点下所有的一级子节点,语法"./*[1]"表示的是选择当前节点中的第一个子节点。 另外还有一个地方可以改进的是<xsl:value-of select="序号"/>,我们可以把它改成<xsl:value-of select="."/>,表示在每一次循环中选择当前节点。 在我们的函数中,还使用了一些硬代码,如果不做改动的话,我们的通用性还是实现不了,因此,我们下面就看看如何替换硬代码中的语句。 在创建表头的时候,我们使用了<td onClick="sort(''序号'')"> 序号</td>的语句,如果XML数据里没有序号节点的话,这里显然会出现错误的,为了实现通用性,我们自定义了一个函数getName,来取得所要显示的节点的名称: <td> <xsl:attribute name="onClick"> Sort(''<xsl:value-of select="user:getName(.)"/>'') </xsl:attribute> <xsl:value-of select="user:getName(.)"/> </td> 自定义函数是XSLT的一个突出的功能,要使用这个特性,我们得用msxml:script元素来定义,同时,必须在样式单定义的时候指定一个用户定义的名字空间。下面就是我们使用自定义函数的全部内容: <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://lUCky.myrice.com" version="1.0"> <msxsl:script language="VBScript" implements-prefix="user">