[xsl] Using javascript to pass a parameter to XSL

Subject: [xsl] Using javascript to pass a parameter to XSL
From: Maria Amuchastegui <mamuchastegui@xxxxxxxxxxx>
Date: Thu, 17 Mar 2005 12:11:51 -0500
I have an HTML file with an embedded XML island which calls an external
stylesheet. I want to use Javascript to pass a parameter to the stylesheet
using the addParameter method. I've almost got it but it doesn't quite work.

Here is the HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="JavaScript">
function sortXML(column,order) 
{
var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0");
var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
var xslproc;
xsldoc.async = false;
xsldoc.load('Sort.xsl');          
xslt.stylesheet = xsldoc;
var xmldoc = document.getElementById('ChargeableMessages');
xslproc = xslt.createProcessor();
xslproc.input = xmldoc;
xslproc.addParameter("sortKey", column);
xslproc.addParameter("sortOrder", order);
xslproc.transform();
container.innerHTML = xmldoc.transformNode(xsldoc);        
}
</script>     
</head>
<body onload="sortXML('id','ascending');">

<div id="container"></div>

<xml id="ChargeableMessages" style="display:none;">
	<chargeablemessages>
		<message>
			<id>1-01</id>
			<date>2005-04-23</date>
			<location>Quebec QC</location>
			<number>418 683 1234</number>
			<duration>1</duration>
			<charges>0.43</charges>
			<savings>.043</savings>
			<amount/>
		</message>
		<message>
			<id>1-02</id>
			<date>2005-04-28</date>
			<location>Montreal QC</location>
			<number>514 485 6611</number>
			<duration>2</duration>
			<charges>3.44</charges>
			<savings/>
			<amount/>
		</message>
		<message>
			<id>1-03</id>
			<date>2005-05-01</date>
			<location>Winnipeg MB</location>
			<number>204 475 4565</number>
			<duration>22</duration>
			<charges>0.55</charges>
			<savings/>
			<amount/>
		</message>
	</chargeablemessages>
</xml>

</body>
</html>

And here is the stylesheet:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
	<xsl:param name="sortKey"/>
	<xsl:param name="sortOrder"/>
	<xsl:template match="/">
		<xsl:apply-templates select="chargeablemessages"/>
	</xsl:template>
	<xsl:template match="chargeablemessages">
		<h3>Long distance calls - Click on any column heading to
sort</h3>
		<table border="1">
		<tbody>
		<tr>
		<th><a href="#"
onclick="sortXML('id','ascending');">ID</a></th>
		<th><a href="#"
onclick="sortXML('date','ascending');">Date</a></th>
		<th><a href="#"
onclick="sortXML('location','ascending');">Location</a></th>
		<th><a href="#"
onclick="sortXML('number','ascending');">Number</a></th>
		<th><a href="#"
onclick="sortXML('duration','ascending');">Duration</a></th>
		<th><a href="#"
onclick="sortXML('charges','ascending');">Charges</a></th>
		</tr>

		<xsl:apply-templates select="//message">
		<xsl:sort select="$sortKey" order="$sortOrder"/>
		</xsl:apply-templates>

		</tbody>
		</table>
	</xsl:template>
	<xsl:template match="//message">
		<tr>
		<td><xsl:value-of select="id"/></td>
		<td><xsl:value-of select="date"/></td>
		<td><xsl:value-of select="location"/></td>
		<td><xsl:value-of select="number"/></td>
		<td><xsl:value-of select="duration"/></td>
		<td><xsl:value-of select="charges"/></td>
		</tr>
	</xsl:template>
</xsl:stylesheet>

Current Thread