例一:
關于XSLT及XML的介紹就不再多說,這里關注的是如何使用XSLT分頁顯示XML中的數據,并可以針對每一列對全部數據進行重新排序.
假設有下面的XML數據,需要使用XSLT分頁顯示XML數據,并可針對每一列對所有數據進行重新排序,應該如何處理呢?
XML數據如下:
1
<?xml version="1.0" encoding="gb2312"?>
2
<AllUsers xmlns:dt="urn:schemas-microsoft-com:datatypes">
3
<User>
4
<UserID>01</UserID>
5
<UserName>OhYeah</UserName>
6
<UserEmail>Oh@126.com</UserEmail>
7
</User>
8
<User>
9
<UserID>02</UserID>
10
<UserName>楊過</UserName>
11
<UserEmail>yg@21.com</UserEmail>
12
</User>
13
<User>
14
<UserID>03</UserID>
15
<UserName>真寶玉</UserName>
16
<UserEmail>xyz@msn.com</UserEmail>
17
</User>
18
<User>
19
<UserID>04</UserID>
20
<UserName>天堂</UserName>
21
<UserEmail>tt@163.net</UserEmail>
22
</User>
23
<User>
24
<UserID>05</UserID>
25
<UserName>草原</UserName>
26
<UserEmail>yt@sina.com</UserEmail>
27
</User>
28
</AllUsers>
29
恐怕最容易想到的就是XSLT中的for-each元素.
1
<xsl:param name="PageNo">1</xsl:param>
2
<xsl:param name="FuncName">goPage</xsl:param>
3
<xsl:param name="Count">4</xsl:param>
4
<table width="800" border="0" cellspacing="2" cellpadding="2">
5
<tr>
6
<th><xsl:attribute name="onClick">sortBy('UserID')</xsl:attribute>RecordNo</th>
7
<th><xsl:attribute name="onClick">sortBy(' UserName')</xsl:attribute>FieldA</th>
8
<th><xsl:attribute name="onClick">sortBy(' UserEmail')</xsl:attribute>Name</th>
9
</tr>
10
<xsl:for-each select="RecordSet[(position() <= $PageNo*$Count) and (position() > (number($PageNo)-1)*$Count)]">
11
<xsl:sort select="UserID"/>
12
<tr>
13
<td><xsl:value-of select="'UserID'"/></td>
14
<td><xsl:value-of select=" UserName"/></td>
15
<td><xsl:value-of select=" UserEmail"/></td>
16
</tr>
17
</xsl:for-each>
18
</table>
19
頁碼數發生變化時,通過JavaScript指定for-each中的$PageNo變量.
重新排序時,通過JavaScript指定sort元素的select屬性.
但這里就有一個問題:這里點擊列名重新排序時,只是對當前頁的數據進行了重新排序(原因是先用for-each取出的當前頁的數據,然后才進行排序的),咱們本來的目標應該是對所有數據重新排序的.
解決這個問題的過程中,孟子E章曾經給我一篇他網站上的文章,解決了這個問題.但網頁使用的是VBScript,并且不能正確運行.為此,浪費了不少時間(-_-!!!,太懶了,就希望借用成功的代碼,遇到不正確的代碼就不愿自己去看.).不過最終總算搞明白了.解決方案就是先用一個XSLT對所有數據重新排序后生成XML,再對重新排序后的XML進行分頁操作.
用于對XML排序并生成XML的XSLT如下:
1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2
<xsl:template match="Table">
3
<?xml version="1.0" encoding="iso-8859-1"?>
4
< AllUsers >
5
<xsl:for-each select="RecordSet">
6
<xsl:sort order="ascending" data-type="text" select="Name"/>
7
<User>
8
<UserID><xsl:value-of select="RecordNo" /></UserID>
9
<UserName><xsl:value-of select="FieldA" /></UserName>
10
<UserEmail><xsl:value-of select="Name" /></UserEmail>
11
</User>
12
</xsl:for-each>
13
</ AllUsers >
14
</xsl:template>
15
</xsl:stylesheet>
例子二:
posted on 2008-06-04 16:54
acerbic coffee 閱讀(704)
評論(0) 編輯 收藏 所屬分類:
個人筆記