您的位置:首页技术开发ASP技巧 → 数据排序及如何动态排序

数据排序及如何动态排序

时间:2004/11/7 4:10:00来源:本站整理作者:蓝点我要评论(0)

数据排序及如何动态排序



//Belltree

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



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



及中都可以看到

order-by属性,该属性可以对选出来的节点按照order-by的值进行排序.





Christina Aguilera



Genie in a bottle

What a girl wants

I turn to you

So emotional

Come on over

Reflection

Love for all seasons

Somebody's somebody

When you put your hands on me

Blessed

Love will find a way

obvious







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














这样就按照每个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树呢?当然不必,这样也会带来错误,应为结果必须显示在某个地方,我们回头来看一看:






















我们在的用

容器包住,为什么要用两个

呢,这个后面说明,先来看看transformNode,应用整个XSL

树会带来什么后果,这样又会重新生成一个

...

,就会导致两个同id的div,结果是无法运行.



我们只需要选

这个节点就够了.



var xsldoc = document.XSLDocument.selectSingleNode("//div[@id='in']");



然后将xsldoc应用到xmldoc上就成了



divItems.innerHTML = xmldoc.transformNode(xsldoc);



两个div还是有用的吧,第一个是一个显示结果的容器,第二个每次都包含在结果树中,如果没有

直接选<div

id="divItems">就会出现和应用整个XSL树一样的错误.



最后,还是看看完整的:(具体效果请看http://go8.163.com/~belltree/test.xml)

XML:









Christina Aguilera



Genie in a bottle

What a girl wants

I turn to you

So emotional

Come on over

Reflection

Love for all seasons

Somebody's somebody

When you put your hands on me

Blessed

Love will find a way

obvious







XSL:















function sort(key) {

// Find the "for-each" attributes in the style sheet.

var s = document.XSLDocument.selectSingleNode("//xsl:for-each");



if (key=="")

s.removeAttribute("order-by");

else

s.setAttribute("order-by",key);



// Find the subset of the document we need to update.

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

var xsldoc = document.XSLDocument.selectSingleNode("//div[@id='in']");



// Apply the style sheet to the subset, and update the display.

divItems.innerHTML = xmldoc.transformNode(xsldoc);

}







" _ue_custom_node_="true">

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 VB.NET 2005编写定时关 Jquery get/post下乱码解决方法 前台gbk gb如何使用数据绑定控件显示数据ASP脚本循环语句ASP怎么提速

人气排行 轻松解决"Server Application Error"和iis"一起学习DataGridView调整列宽用ASP随机生成文件名的函数Jquery get/post下乱码解决方法 前台gbk gbODBC Drivers错误80004005的解决办法返回UPDATE SQL语句所影响的行数的方法用Javascript隐藏超级链接的真实地址两个不同数据库表的分页显示解决方案