|
Subject: Re: Set the param value from JavaScript From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Wed, 8 Nov 2000 10:22:42 +0000 |
Bharat,
> 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
[snip]
> 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
instead.
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 =
'startRow']/@select");
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" />
</xsl:apply-templates>
</xsl:template>
[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');
XSLTProcessor.transform();
result = XSLTProcessor.output;
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Set the param value from JavaScript, Bharat . Chintapally | Thread | Re: Set the param value from JavaSc, Bharat . Chintapally |
| Re: text(), David Carlisle | Date | Re: No Longer able to use <xsl:scri, Jeni Tennison |
| Month |