当前位置: 首页 > 图文教程 > 网络编程 > ASP > 数据排序及如何动态排序

ASP
在ASP中使用SQL语句之10:视图
在ASP中使用SQL语句之11:记录统计
VBS、ASP代码语法加亮显示的类(2)
asp作品保护方案
使用NextRecordset通过一个Connection输出多个select查询
超长字符的智能分页-支持HTML
远程获取内容,并将内容存在本地电脑上,包括任何文件
把文件存进access数据库然后取出来供人下载的代码
一个分页存储过程
在asp文件中访问flash详细信息
关于生成目录树结构的类
用自定义函数获取汉字的首字母
asp在SQL SER2k中新建帐号和给帐号权限的实现
不用 EOF 以加快记录循环
js的单元格颜色间隔
根据选择的Checkbox动态在表格中列出选择的值
URL欺骗
汉字转化为拼音
一个不需要第三方组件,可实现华简单图形的类
组合查询之核心:拼接字符串

ASP 中的 数据排序及如何动态排序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 89 ::
收藏到网摘: n/a

  数据排序及如何动态排序

//Belltree
//http://www.lurer.net/

//初学XML,错误之处多多,各路高手多多指正

在<xsl:for-each select="//item" order-by="text()">及<xsl:apply-templates select="//item"/>中都可以看到
order-by属性,该属性可以对选出来的节点按照order-by的值进行排序.

<singer>
<title>Christina Aguilera</title>
<songs>
<item id="0" href="genieinabottle.christina.xml">Genie in a bottle</item>
<item id="1" href="whatagirlwants.christina.xml">What a girl wants</item>
<item id="2" href="iturntoyou.christina.xml">I turn to you</item>
<item id="5" href="soemotional.christina.xml">So emotional</item>
<item id="4" href="comeonover.christina.xml">Come on over</item>
<item id="3" href="reflection.christina.xml">Reflection</item>
<item id="6" href="lovefor.christina.xml">Love for all seasons</item>
<item id="7" href="somebody.christina.xml">Somebody's somebody</item>
<item id="10" href="puturhands.christina.xml">When you put your hands on me</item>
<item id="9" href="blessed.christina.xml">Blessed</item>
<item id="8" href="lovefindaway.christina.xml">Love will find a way</item>
<item id="11" href="obvious.christina.xml">obvious</item>
</songs>
</singer>

在这个例子中,如果我们需要一个按照歌名进行排序的列表,可以使用如下XSL:

<xsl:for-each select="//item" order-by="text()">
<a><xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute><xsl:value-of /></a>
<br/>
</xsl:for-each>

这样就按照每个item节点的值进行了排序,还可以使用id属性来排序,只要将order-by="text()"改为oder-by="@id"即可.

但如果我们需要让用户自己选择如何排序,甚至是不排序,即按照原始顺序.

这时就该让script和XML DOM上场了,在DOM中,有一系列的Methods和Attributes让你设置,你可以重新生成一棵树,我们就可
以利用这些东东将order-by属性的值改掉,然后再重新利用这个XSL节点对你需要的节点数据重新生成一棵树,这棵树是排序
了的,注意,order-by的值可不是原来的了,是你的新值.你甚至可以将order-by属性从XSL节点属性中去掉,这样生成的树就
是按照原始顺序了.

看看相应的XML DOM Methods:
selectSingleNode   返回单个节点
setAttribute       设置属性值,如果属性不存在,创建它并设置值
removeAttribute    移去属性
transformNode      使用相应的XSL stylesheet对该节点及其字节点进行处理后,返回一个结果树

最开始,我们要将XSL中的xsl:for-each节点选出来,并将它赋予一个变量s,好对它进行处理:
var s = document.XSLDocument.selectSingleNode("//xsl:for-each")

然后,对它的属性order-by的值从新设置:
setAttribute("order-by",key);  //key为一个变量,可以为id,text()

或者,将其删去:
removeAttribute("order-by");

哈哈,很简单吧

我们现在来看看源树中需要排序的部分,是singer/songs节点中的每个item节点,不需要选择整个树,只要singer/songs就可
以了

var xmldoc = document.XMLDocument.selectSingleNode("singer/songs");

将整个XSL树应用该节点:

divItems.innerHTML = xmldoc.transformNode(document.XSLDocument);  //错误来了

是不是要对这个节点应用整个XSL树呢?当然不必,这样也会带来错误,应为结果必须显示在某个地方,我们回头来看一看:
<xsl:template match="/">
<div id="divItems">
<div id="in">

<xsl:for-each select="//item" order-by="id">
<a><xsl:attribute name="href"><xsl:value-of select="@href"/>