1、为<xsl:param>标签设定参数实现动态排序(推荐)
<html>
<body>
<table DATASRC="#catalogs" border=1>
<thead>
<tr>
<tdonclick="sort('TITLE','descending');">TITLE</td>
<td>ARTIST</td>
<tdonclick="sort('COUNTRY','ascending');">COUNTRY</td>
<td>COMPANY</td>
<td>PRICE</td>
<td>YEAR</td>
</tr>
</thead>
<tbody>
<tr>
<td ><div DATAFLD="TITLE"></div></td>
<td ><divDATAFLD="ARTIST"></div></td>
<td ><divDATAFLD="COUNTRY"></div></td>
<td ><divDATAFLD="COMPANY"></div></td>
<td ><div DATAFLD="PRICE"></div></td>
<td ><div DATAFLD="YEAR"></div></td>
</tr>
</tbody>
</table>
<xml id="catalogs">
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
Bob Dylan
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Burlesque</TITLE>
Dylan
<COUNTRY>UA</COUNTRY>
<COMPANY>umbia</COMPANY>
<PRICE>1.90</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Empire</TITLE>
Bob
<COUNTRY>US</COUNTRY>
<COMPANY>bia</COMPANY>
<PRICE>12.90</PRICE>
<YEAR>1995</YEAR>
</CD>
</CATALOG>
</xml>
<xml id="xstyle">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
<xsl:output method="xml"/>
<xsl:param name="sortorder" select="'descending'"/>
<xsl:param name="sortfield" select="'xxx'"/>
<xsl:template match="/">
<CATALOG>
<xsl:for-each select="CATALOG/CD">
<xsl:sort select="*[name()=$sortfield]" order="{$sortorder}"/>
<CD>
<TITLE><xsl:value-ofselect="TITLE"/></TITLE>
<xsl:value-of select="ARTIST"/>
<COUNTRY><xsl:value-ofselect="COUNTRY"/></COUNTRY>
<COMPANY><xsl:value-ofselect="COMPANY"/></COMPANY>
<PRICE><xsl:value-ofselect="PRICE"/></PRICE>
<YEAR><xsl:value-of select="YEAR"/></YEAR>
</CD>
</xsl:for-each>
</CATALOG>
</xsl:template>
</xsl:stylesheet>
</xml>
<scriptlanguage="vbscript">
function sort(strSortField, strSortOrder)
dim objXSL, objXML,objTemplate, objProcessor, strHTML, strDrinkType
Set objXML =CreateObject("Msxml2.FreeThreadedDOMDocument")
Set objXSL =CreateObject("Msxml2.FreeThreadedDOMDocument")
'Load the XML document
objXML.async = False
objXML.Loadxmlcatalogs.xml
'Load the XSL document
objXSL.async = False
objXSL.Loadxml xstyle.xml
'Create an instance of our XSLTemplate object
Set objTemplate =CreateObject("MSXML2.XSLTemplate")
'Create an instance of ourstylesheet object using our recently loaded XSLT document
Set objTemplate.stylesheet =objXSL
'Create an instance of ourProcessor object
Set objProcessor =objTemplate.createProcessor
'Define the input object forour object equal to our recently loaded XML document
objProcessor.input = objXML
'Now, finally we can add anyparameters that we require to our Template processor
objProcessor.AddParameter"sortfield", strSortField
objProcessor.AddParameter"sortorder", strSortOrder
'Last but not least we do ourtransformation
objProcessor.Transform
'Store the results of theoutput into a string.
strXML =objProcessor.output
'Load up an XML DOM object fromthe recent XML output
objXML.loadxml strXML
'Select only the "employees"elements from our document object
objXML.selectNodes("//CATALOG")
'Load our Data Island using ournew XML object
catalogs.loadxml objXML.xml
end function
</script>
<scriptlanguage="javascript">
function sort2(xmlObj, xslObj, sortByColName)
{
var xmlData=eval_r("document.all."+xmlObj).XMLDocument;
var xslData=eval_r("document.all."+xslObj).XMLDocument;
varnodes=xslData.documentElement.selectSingleNode("xsl:for-each");
nodes.selectSingleNode("@order-by").value=sortByColName;
xmlData.documentElement.transformNodeToObject(xslData.documentElement,xmlData);
}
</script>
</body>
</html>
2、直接通过DOM实现,灵活性欠缺:
<html>
<body>
<table DATASRC="#catalogs" border=1>
<thead>
<tr>
<tdonclick="sort('catalogs','xstyle','TITLE');">TITLE</td>
<td>ARTIST</td>
<td>COUNTRY</td>
<td>COMPANY</td>
<td>PRICE</td>
<td>YEAR</td>
</tr>
</thead>
<tbody>
<tr>
<td ><div DATAFLD="TITLE"></div></td>
<td ><divDATAFLD="ARTIST"></div></td>
<td ><divDATAFLD="COUNTRY"></div></td>
<td ><divDATAFLD="COMPANY"></div></td>
<td ><div DATAFLD="PRICE"></div></td>
<td ><div DATAFLD="YEAR"></div></td>
</tr>
</tbody>
</table>
<xml id='catalogs'>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
Bob Dylan
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Burlesque</TITLE>
Dylan
<COUNTRY>UA</COUNTRY>
<COMPANY>umbia</COMPANY>
<PRICE>1.90</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Empire</TITLE>
Bob
<COUNTRY>US</COUNTRY>
<COMPANY>bia</COMPANY>
<PRICE>12.90</PRICE>
<YEAR>1995</YEAR>
</CD>
</CATALOG>
</xml>
<xml id="xstyle">
<CATALOG>
<xsl:for-each select="CD" order-by="+TITLE" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<CD>
<TITLE><xsl:value-ofselect="TITLE"/></TITLE>
<xsl:value-of select="ARTIST"/>
<COUNTRY><xsl:value-ofselect="COUNTRY"/></COUNTRY>
<COMPANY><xsl:value-ofselect="COMPANY"/></COMPANY>
<PRICE><xsl:value-ofselect="PRICE"/></PRICE>
<YEAR><xsl:value-of select="YEAR"/></YEAR>
</CD>
</xsl:for-each>
</CATALOG>
</xml>
<script language="javascript">
function sort(xmlObj, xslObj, sortByColName)
{
var xmlData=eval_r("document.all."+xmlObj).XMLDocument;
var xslData=eval_r("document.all."+xslObj).XMLDocument;
varnodes=xslData.documentElement.selectSingleNode("xsl:for-each");
nodes.selectSingleNode("@order-by").value=sortByColName;
xmlData.documentElement.transformNodeToObject(xslData.documentElement,xmlData);
}
</script>
</body>
</html>