Re: Set the param value from JavaScript

Subject: Re: Set the param value from JavaScript
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Wed, 8 Nov 2000 10:22:42 +0000

> I am trying to set a param value using JavaScript but I am unable to access
> the right node, I am not sure about my xpath expression. I am using MSXML3
> in IE 5.5 browser
> I am trying to set the startRow value using a JavaScript method and the
> following XPath string
> /***
> var s = document.XSLDocument.selectSingleNode("*/xsl:template[@match
> ='/']//xsl:apply-templates/xsl:with-param[@name='startRow']");
> alert(s.value);
> /****
> I am getting some object back from the selectSingleNode() method, but
> unable to set it's value. Am I doing it right?

The XPath looks probably correct - you might want to add a '/' at the
start to ensure that it's relative to the root node.

Looking at the MSXML documentation, I think that the problem is that
elements don't have a .value property.  .value applies to attribute
nodes, but not element nodes.  I think that you want .nodeValue

An alternative is to change the way that you're specifying the value
of the variable: use the @select attribute instead of the content of
the xsl:variable element:

  <xsl:variable name="startRow" select="1" />

You can then set it by setting the .value of the @select attribute
that you can get through:

  var s =
  document.XSLDocument.selectSingleNode("/*/xsl:template[@match =
  '/']//xsl:apply-templates/xsl:with-param[@name =
  s.value = '3';

This is a better method because declaring a variable value through its
content actually creates a result tree fragment containing a text node
that has the value: it takes less space to hold the value of an
attribute than a node.
Finally, the purer XSLT way of affecting how a stylesheet processes
XML on a particular run would be to pass in parameters to the
stylesheet and use those to set the values of the parameters:

<xsl:param name="start" select="1" />
<xsl:param name="end" select="2" />

<xsl:template match="/">
   <xsl:apply-templates select="Status/Data">
      <xsl:with-param name="startRow" select="$start" />
      <xsl:with-param name="endRow" select="$end" />

[Actually, as these would be global parameters, there's no need to
pass them into templates individually.]

The parameters can be passed into the stylesheet from a script using
something like:

  XSLStylesheet = new ActiveXObject('Msxml2.XSLTemplate');
  XSLStylesheet.stylesheet = document.XSLDocument;
  XSLTProcessor = XSLStylesheet.createProcessor();

  XSLTProcessor.input = XMLDOM;
  XSLTProcessor.addParameter('start', '3');
  XSLTProcessor.addParameter('end', '5');
  result = XSLTProcessor.output;

I hope that helps,


Jeni Tennison

 XSL-List info and archive:

Current Thread