第二个灵魂 发表于 2015-1-16 22:33:40

ASP编程:数据排序及怎样静态排序

减少客户内IT专业人才缺乏带来的影响。ASP的客户员工利用浏览器进入相关的应用软件,简单易用,无需专业技术支持。数据排序及怎样静态排序

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

//初学XML,毛病的地方多多,各路妙手多多斧正

在<xsl:for-eachselect="//item"order-by="text()">及<xsl:apply-templatesselect="//item"/>中都能够看到
order-by属性,该属性能够对选出来的节点依照order-by的值举行排序.

<singer>
<title>ChristinaAguilera</title>
<songs>
<itemid="0"href="genieinabottle.christina.xml">Genieinabottle</item>
<itemid="1"href="whatagirlwants.christina.xml">Whatagirlwants</item>
<itemid="2"href="iturntoyou.christina.xml">Iturntoyou</item>
<itemid="5"href="soemotional.christina.xml">Soemotional</item>
<itemid="4"href="comeonover.christina.xml">Comeonover</item>
<itemid="3"href="reflection.christina.xml">Reflection</item>
<itemid="6"href="lovefor.christina.xml">Loveforallseasons</item>
<itemid="7"href="somebody.christina.xml">Somebodyssomebody</item>
<itemid="10"href="puturhands.christina.xml">Whenyouputyourhandsonme</item>
<itemid="9"href="blessed.christina.xml">Blessed</item>
<itemid="8"href="lovefindaway.christina.xml">Lovewillfindaway</item>
<itemid="11"href="obvious.christina.xml">obvious</item>
</songs>
</singer>

在这个例子中,假如我们必要一个依照歌名举行排序的列表,可使用以下XSL:

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

如许就依照每一个item节点的值举行了排序,还可使用id属性来排序,只需将order-by="text()"改成oder-by="@id"便可.

但假如我们必要让用户本人选择怎样排序,乃至是不排序,即依照原始按次.

这时候就该让script和XMLDOM上场了,在DOM中,有一系列的Methods和Attributes让你设置,你能够从头天生一棵树,我们便可
以使用这些东东将order-by属性的值改失落,然后再从头使用这个XSL节点对你必要的节点数据从头天生一棵树,这棵树是排序
了的,注重,order-by的值可不是本来的了,是你的新值.你乃至能够将order-by属性从XSL节点属性中往失落,如许天生的树就
是依照原始按次了.

看看响应的XMLDOMMethods:
selectSingleNode前往单个节点
setAttribute设置属性值,假如属性不存在,创立它并设置值
removeAttribute移往属性
transformNode利用响应的XSLstylesheet对该节点及其字节点举行处置后,前往一个了局树

最入手下手,我们要将XSL中的xsl:for-each节点选出来,并将它付与一个变量s,好对它举行处置:
vars=document.XSLDocument.selectSingleNode("//xsl:for-each")

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

大概,将其删往:
removeAttribute("order-by");

哈哈,很复杂吧

我们如今来看看源树中必要排序的部分,是singer/songs节点中的每一个item节点,不必要选择全部树,只需singer/songs便可
以了

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

将全部XSL树使用该节点:

divItems.innerHTML=xmldoc.transformNode(document.XSLDocument);//毛病来了

是否是要对这个节点使用全部XSL树呢?固然不用,如许也会带来毛病,应为了局必需显现在某个中央,我们转头来看一看:
<xsl:templatematch="/">
<divid="divItems">
<divid="in">

<xsl:for-eachselect="//item"order-by="id">
<a><xsl:attributename="href"><xsl:value-ofselect="@href"/></xsl:attribute><xsl:value-of/></a>
<br/>
</xsl:for-each>

</div>
</div>
</xsl:template>
我们在<xsl:for-each>的用<div>容器包住,为何要用两个<div>呢,这个前面申明,先来看看transformNode,使用全部XSL
树会带来甚么成果,如许又会从头天生一个<divid="divItems">...</div>,就会招致两个同id的div,了局是没法运转.

我们只必要选<divid="in">这个节点就够了.

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

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

divItems.innerHTML=xmldoc.transformNode(xsldoc);

两个div仍是有效的吧,第一个是一个显现了局的容器,第二个每次都包括在了局树中,假如没有<divid="in">间接选<div
id="divItems">就会呈现和使用全部XSL树一样的毛病.

最初,仍是看看完全的:(详细效果请看http://go8.163.com/~belltree/test.xml)
XML:
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="test.xsl"?>

<singer>
<title>ChristinaAguilera</title>
<songs>
<itemid="0"href="genieinabottle.christina.xml">Genieinabottle</item>
<itemid="1"href="whatagirlwants.christina.xml">Whatagirlwants</item>
<itemid="2"href="iturntoyou.christina.xml">Iturntoyou</item>
<itemid="3"href="soemotional.christina.xml">Soemotional</item>
<itemid="4"href="comeonover.christina.xml">Comeonover</item>
<itemid="5"href="reflection.christina.xml">Reflection</item>
<itemid="6"href="lovefor.christina.xml">Loveforallseasons</item>
<itemid="7"href="somebody.christina.xml">Somebodyssomebody</item>
<itemid="8"href="puturhands.christina.xml">Whenyouputyourhandsonme</item>
<itemid="9"href="blessed.christina.xml">Blessed</item>
<itemid="10"href="lovefindaway.christina.xml">Lovewillfindaway</item>
<itemid="11"href="obvious.christina.xml">obvious</item>
</songs>
</singer>

XSL:
<?xmlversion="1.0"encoding="gb2312"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:templatematch="/">

<html>
<scriptlanguage="javascript">
<xsl:comment>
functionsort(key){
//Findthe"for-each"attributesinthestylesheet.
vars=document.XSLDocument.selectSingleNode("//xsl:for-each");

if(key=="")
s.removeAttribute("order-by");
else
s.setAttribute("order-by",key);

//Findthesubsetofthedocumentweneedtoupdate.
varxmldoc=document.XMLDocument.selectSingleNode("singer/songs");
varxsldoc=document.XSLDocument.selectSingleNode("//div[@id=in]");

//Applythestylesheettothesubset,andupdatethedisplay.
divItems.innerHTML=xmldoc.transformNode(xsldoc);
}


</xsl:comment>
</script>
<body>
<tableborder="1"cellspacing="0"cellpadding="1">
<tr><td>
<divid="divItems">
<divid="in">

<xsl:for-eachselect="//item"order-by="@id">
<a><xsl:attributename="href"><xsl:value-ofselect="@href"/></xsl:attribute><xsl:value-of/></a>
<br/>
</xsl:for-each>

</div>
</div>
</td><td>
<inputtype="button"value="Text"/>
<inputtype="button"value="@id"/>
<inputtype="button"value="Origin"/>
</td></tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧

活着的死人 发表于 2015-1-19 16:28:24

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:

仓酷云 发表于 2015-1-27 08:23:50

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:

再现理想 发表于 2015-2-5 05:17:07

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

若相依 发表于 2015-2-11 05:57:16

从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了

乐观 发表于 2015-3-1 22:52:43

不能只是将它停留在纸上谈兵的程度上。

兰色精灵 发表于 2015-3-11 00:48:53

下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...

精灵巫婆 发表于 2015-3-17 17:10:59

运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。

愤怒的大鸟 发表于 2015-3-17 17:10:55

我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。

海妖 发表于 2015-3-24 15:26:08

接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
页: [1]
查看完整版本: ASP编程:数据排序及怎样静态排序