亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

數據排序及如何動態排序

2019-11-18 21:13:59
字體:
來源:轉載
供稿:網友
數據排序及如何動態排序

//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"/></xsl:attribute><xsl:value-of /></a>
<br/>
</xsl:for-each>

</div>
</div>
</xsl:template>
我們在<xsl:for-each>的用<div>容器包住,為什么要用兩個<div>呢,這個后面說明,先來看看transformNode,應用整個XSL
樹會帶來什么后果,這樣又會重新生成一個<div id="divItems">...</div>,就會導致兩個同id的div,結果是無法運行.

我們只需要選<div id="in">這個節點就夠了.

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

然后將xsldoc應用到xmldoc上就成了

divItems.innerHTML = xmldoc.transformNode(xsldoc);

兩個div還是有用的吧,第一個是一個顯示結果的容器,第二個每次都包含在結果樹中,如果沒有<div id="in">直接選<div
id="divItems">就會出現和應用整個XSL樹一樣的錯誤.

最后,還是看看完整的:(具體效果請看http://go8.163.com/~belltree/test.xml)
XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>

<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="3" href="soemotional.christina.xml">So emotional</item>
<item id="4" href="comeonover.christina.xml">Come on over</item>
<item id="5" 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="8" href="puturhands.christina.xml">When you put your hands on me</item>
<item id="9" href="blessed.christina.xml">Blessed</item>
<item id="10" href="lovefindaway.christina.xml">Love will find a way</item>
<item id="11" href="obvious.christina.xml">obvious</item>
</songs>
</singer>

XSL:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<html>
<script language="javascript">
<xsl:comment>
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);
}


</xsl:comment>
</script>
<body>
<table border="1" cellspacing="0" cellpadding="1">
<tr><td>
<div id="divItems">
<div id="in">

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

</div>
</div>
</td><td>
<input type="button" value=" Text " onClick="sort('text()')"/>
<input type="button" value=" @id " onClick="sort('@id')"/>
<input type="button" value="Origin" onClick="sort('')"/>
</td></tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看精品国产视频| 国产精品一区二区三区在线播放| 亚洲精品一区二区三区不| 日韩性xxxx爱| 狠狠躁夜夜躁久久躁别揉| 美女福利视频一区| 亚洲乱码一区av黑人高潮| 午夜精品久久久久久久男人的天堂| 欧美午夜片欧美片在线观看| 欧美日韩中文字幕综合视频| 久久精品成人欧美大片古装| 日韩精品极品视频免费观看| 色狠狠久久aa北条麻妃| 欧美高清视频在线观看| 亚洲天堂视频在线观看| 欧美午夜宅男影院在线观看| 日本国产精品视频| 久久69精品久久久久久国产越南| 久久av.com| 欧美在线观看日本一区| 国产一区二区久久精品| 中文字幕国产亚洲| 狠狠躁天天躁日日躁欧美| 欧美老少做受xxxx高潮| 亚洲午夜未满十八勿入免费观看全集| 日韩中文娱乐网| 在线播放亚洲激情| 国产精品国产自产拍高清av水多| 97香蕉超级碰碰久久免费软件| 欧洲亚洲免费视频| 日韩电影大全免费观看2023年上| 久久精品电影一区二区| 中文字幕在线看视频国产欧美在线看完整| 欧美性xxxx极品hd满灌| 丝袜美腿精品国产二区| 欧美一乱一性一交一视频| 中文字幕日韩精品在线观看| 国产欧美精品日韩精品| 成人黄色av免费在线观看| 欧美日韩国产精品一区二区不卡中文| 综合网日日天干夜夜久久| 91精品国产乱码久久久久久久久| 欧美一区二区三区免费视| 国产精品日韩久久久久| 91亚洲精品在线| 日韩免费不卡av| 国产成人综合精品在线| 欧美日韩中文字幕日韩欧美| 精品国内产的精品视频在线观看| 国产欧美精品一区二区三区介绍| 538国产精品一区二区免费视频| 日本道色综合久久影院| 欧美日韩国产成人在线| 欧美高清视频在线观看| 亚洲国产欧美自拍| 国产精品一香蕉国产线看观看| 久久精品国产亚洲精品2020| 亚洲人线精品午夜| 久久这里有精品| 成人av番号网| 午夜精品久久久久久久99热浪潮| 中文一区二区视频| 国产suv精品一区二区| 日韩一区二区av| 亚洲欧美日韩精品久久| 久久久久久久久亚洲| 国产精品一区二区三区久久| 91久久国产婷婷一区二区| 欧美日韩一区二区免费在线观看| 亚洲第一网站免费视频| 成人国产亚洲精品a区天堂华泰| 国产高清视频一区三区| 亚洲国产精品推荐| 亚洲成人久久网| 国产精品va在线播放| 668精品在线视频| 欧美激情亚洲精品| 一区二区三区美女xx视频| 久久久精品一区二区| 久久久久999| 亚洲香蕉成视频在线观看| 91精品国产91久久久久久| 亚洲伦理中文字幕| 国产欧亚日韩视频| 欧美电影免费在线观看| 国产97人人超碰caoprom| 91国产视频在线播放| 热久久这里只有精品| 欧美激情视频三区| 国产拍精品一二三| 久久综合网hezyo| 狠狠色狠狠色综合日日小说| 久久久噜噜噜久久中文字免| 国产精品一区二区久久久久| 国产成人一区二区| 国产成人综合亚洲| 国产精品美乳在线观看| 91中文在线观看| 中文字幕免费精品一区高清| 欧美黄色成人网| 精品视频—区二区三区免费| 亚洲人成在线电影| 最近日韩中文字幕中文| 久久久伊人欧美| 91久久久久久久久久久久久| 日韩中文字幕精品视频| 91精品国产免费久久久久久| 久久97久久97精品免视看| 欧美激情2020午夜免费观看| 亚洲a∨日韩av高清在线观看| 最新91在线视频| 日韩精品在线第一页| 亚洲欧美国产日韩中文字幕| 日韩乱码在线视频| 中文字幕精品一区二区精品| 国产欧美日韩免费看aⅴ视频| 黄网动漫久久久| 欧美中文字幕视频在线观看| 欧美一级视频一区二区| 久久久亚洲成人| 国产精品日韩在线观看| 欧美在线视频免费观看| 91免费综合在线| 亚洲视频网站在线观看| 亚洲欧美日韩成人| 久久精品视频在线播放| 亚洲白虎美女被爆操| 亚洲日本中文字幕免费在线不卡| 亚洲精品suv精品一区二区| 日本成人在线视频网址| 亚洲免费人成在线视频观看| www.欧美三级电影.com| 国产脚交av在线一区二区| 日韩av在线一区| 91久久久久久| 日韩av在线直播| 欧美一级大片在线观看| 欧美激情中文字幕在线| 国产婷婷97碰碰久久人人蜜臀| 亚洲欧美视频在线| 亚洲精品国产美女| 九九视频这里只有精品| 亚洲精品720p| 68精品久久久久久欧美| 欧美另类暴力丝袜| 色婷婷av一区二区三区久久| 亚洲激情小视频| 亚洲精品国产精品国自产观看浪潮| 伊人久久五月天| 精品视频在线导航| 2021久久精品国产99国产精品| 青青草国产精品一区二区| 欧美日韩亚洲一区二区三区| 亚洲影院色在线观看免费| 日本高清不卡在线| 亚洲精品成人久久电影| 狠狠综合久久av一区二区小说| 国产精品高潮呻吟久久av黑人| 日韩成人在线网站| 欧美一区二区三区精品电影| 久久精品亚洲一区| 欧美激情手机在线视频| 日韩中文有码在线视频| 日韩中文字幕av|