首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>编程相关>XML>实例详解利用xml创建可分页排序的数据显示页面
实例详解利用xml创建可分页排序的数据显示页面
来源: 发布时间:2008-08-16 发布人: 浏览: 人次   字体: [ ]  

   Function nextPage(intPage) 
   
   Dim strDisplay 
   Dim strDateRange 
   
   If CInt(CStr(intPage) * intRecordsPerPage) < _ 
   Data.selectNodes("/客户关系表/客户").length Then 
   intPage = CInt(intPage) + 1 
   
   Style.XMLDocument.selectNodes("//@OnClick") _ 
   (1).Value = "previousPage(" & intPage & ")" 
   
   Style.XMLDocument.selectNodes("//@OnClick") _ 
   (2).Value = "nextPage(" & intPage & ")" 
   
   Style.XMLDocument.selectNodes _ 
   ("//xsl:for-each/@select")(1).Value = _ 
   "./客户[position() <= " & (CStr(intPage) _ 
   * intRecordsPerPage) & " and position() > " _ 
   & (CInt(intPage) - 1) * intRecordsPerPage & _ 
   "]" 
   
   redisplay (intPage)      
   End If 
   
   End Function 
   下面,我们来看看设置每个页面记录条数的函数setRecordsPerPage(),该函数通过动态修改xsl:for-each的select属性值来实现的,使用XPath来遍历那些符合节点位置大于0并且节点位置小于每页记录数加1的那些节点。其中主要的语句是下面的一行: 
   Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1). _ 
   value = "./客户[position() < " & intRecordsPerPage + 1 & " and "& " position() > 0]" 
   到目前为止,我们的页面既可以实现排序,也实现动态改变每页显示记录条数的功能了,为了实现可重用的要求,我们还可以进行进一步的改进。XPath是进行XML/XSLT应用开发的一个强有力的工具,XPath中可以使用通配符,使XSLT样式单文件完全不依赖于你的数据节点名称。因此,我们在改变XML数据的时候,只要不改变节点的层次关系,可以不必改动XSLT就可以直接使用。比如:在本例中,你可以添加或者删除某些字段、或添加删除一些记录,直接使用本例中的XSLT,不但可以在表格里正常显示出数据,而且还能正常排序和分页。 
   下面我们就分析一下是如何实现的。比如下面的层次关系: 
   <客户关系表> 
   <客户> 
   <序号></序号> 
   <姓名></姓名> 
   <电子邮件></电子邮件> 
   </客户> 
   </客户关系表> 
   假如我们的XSLT中有这样一个选择模板的句子: 
   <xsl:apply-templates select="/客户关系表"/> 
   为了实现通用性的要求,我们可以使用通配符: 
   <xsl:apply-templates select="/*"/> 
   这里我们使用了子运算符"/",它选择了根下的所有节点,两者的不同点在于:"/客户关系表"选择的是根下的客户关系表子节点,而"/*"选择的是根下所有的直接子节点,在上面的XML数据格式中,二者是完全等价的。 
   对于下面的for-each循环来说: 
   <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="
   version="1.0"> 
   <msxsl:script language="VBScript" implements-prefix="user"> 
   <![CDATA[ 
   function getName(node) 
   getName = node.item(0).nodeName 
   end function 
   }> 
   </msxsl:script>  

共5页: 上一页 [1] 2 [3] [4] [5] 下一页
相 关 文 章   发布商链接
·实例讲解XML包含中文字符的URL编码问...
·XML数字签名如何签署外部文件的?
·如何利用XSLT将两个XML文件合成一个X...
·关于xml 空格解释的核心部分理解
·使用JAXP解析xml文件示例
·小解一个简单的XMLSchema的例子
·xml数据岛绑定时的超链接处理代码
·要学会使用xmlbeans解析xml
·实例分析Xml解析校验引起的依赖问题
·XPath语法定义及其使用介绍
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·XML数字签名如何签署外部文件
·实例讲解XML包含中文字符的UR...
·目前主流的XML编程接口API介...
·XPath语法定义及其使用介绍
·实例分析Xml解析校验引起的依
·要学会使用xmlbeans解析xml
·xml数据岛绑定时的超链接处理
·小解一个简单的XMLSchema的例
·使用JAXP解析xml文件示例
·关于xml 空格解释的核心部分...
热 门 文 章
·要学会使用xmlbeans解析xml
·使用JAXP解析xml文件示例
·目前主流的XML编程接口API介...
·xml数据岛绑定时的超链接处理...
·关于xml 空格解释的核心部分...
·XPath语法定义及其使用介绍
·实例分析Xml解析校验引起的依...
·实例讲解XML包含中文字符的UR...
·XML基础入门之架构和语法的实...
·小解一个简单的XMLSchema的例...
·XML数字签名如何签署外部文件...
·如何利用XSLT将两个XML文件合...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .