用XML创建可排序、分页的数据显示页面(3)
来源:孟宪会之精彩世界 发布时间:2008-04-22 18:25:00
下面我们就分析一下是如何实现的。比如下面的层次关系:
<客户关系表>
<客户>
<序号></序号>
<姓名></姓名>
<电子邮件></电子邮件>
</客户>
</客户关系表>
假如我们的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="http://lucky.myrice.com"
version="1.0">
<msxsl:script language="VBScript" implements-prefix="user">
<![CDATA[
function getName(node)
getName = node.item(0).nodeName
end function
]]>
</msxsl:script>
在我们的XSLT文件中,使用了两个循环,我们分别进行相应的更改,第一处:显示表头的地方改为<xsl:for-each select="./*[1]/*">,它等同于<xsl:for-each select="客户关系表/客户[1]/*">;第二处循环是显示每行记录,改成<xsl:for-each select="./*">。
还有其他的地方需要更改的,请参见后面的完整源代码部分。


猜你喜欢
- 链表的反转是一个很常见、很基础的数据结构题,输入一个单向链表,输出逆序反转后的链表,如图:上面的链表转换成下面的链表。实现链表反转有两种方式
- 场景:在页面中点击按钮,数量增加,值是存在store中的,点击事件,值没变。<script setup lang="ts&q
- 要做好一个HTML邮件,说简单,还真不怎么复杂,说它复杂,其实也不难。-_-!!以前写过类似的[ 关于HTML邮件的总结 ],最近又犯愁,就
- 请问如何实现复合查询?我们用下面的代码来实现动态生成查询条件,动态显示结果的复合查询。set database to databasenam
- 前言在上下文管理器协议的过程中,涉及到两个魔术方法__enter__方法 和 __exit__方法在python中所有实现了上下文管理器协议
- 目录前言一、算法思想算法分析思想图解二、代码展示1.创建树节点结构2.实现倾倒动作主递归函数数据初始化总结前言有一个充满水的8品脱的水壶和两
- spring boot 测试单元修改数据库不成功spring boot 集成data jpa 在test区测试数据库操作的时候,查询正常,但
- 加密算法分类 对称加密算法:对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥发送方和接收方需要持有同一把密钥,发送消息
- 分页显示是页面常用技术,可用下列代码来实现:<%page=Request.QueryString("page&q
- 方法一一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大1、设置数
- optimizer.param_groups: 是长度为2的list,其中的元素是2个字典;optimizer.param_groups[0
- 本文实例讲述了python实现的用于搜索文件并进行内容替换的类。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python
- 在python中使用字典,格式如下:dict={ key1:value1 , key2;value2 ...}在实际访问字典值时的使用格式如
- Python 中如果需要对一个变量进行增量运算通常有两种写法,a = a + b 或 a += b。虽然两种方法能够得到同样的结果,但两者却
- rpclib 是一个非常好用的 python webservice 库,可以动态的生成 wsdl, 不过这个项目已经基本停止,并被一个新的项
- 也许你刚刚来到一家公司,他们希望进行一些“可用性”工作。你可能是一名UI设计师,业务分析师,或前端开发人员,一名产品经理,或者负责用户体验部
- 1.字符串的驻留机制字符串:在Python中字符串是基本的数据类型,是一个不可变的字符序列2.什么叫字符串的驻留机制仅保存一份相同且不可变字
- 看代码~from django.contrib import messages messages.info(request, '要显
- 目录面向对象五个基本原则立竿见影的单一职责原则让代码稳定性飞升的开放封闭原则和依赖倒置原则挑肥拣瘦的接口隔离原则轻装上阵的合成复用原则常见的
- #coding:utf-8from wsgiref.simple_server import make_serverdef RunServe