problem self-referencing using document('') to reference parameters
[email protected] 19 Apr 2007 18:01:19 -0700
| Newsgroups | gmane.comp.mozilla.devel.layout.xslt |
|---|---|
| Organization | http://groups.google.com |
| Message-ID | <[email protected]> |
Ok, so I'm doing some crazy self-referential stuff from within an XSL
stylesheet, it actually doesn't surprise me that I've broken the
XSLProcessor object...... When you call "setParameter", the
parameter seems to get set right; that is, any reference to the
parameter will display the updated value correctly. However, if you
make a reference to that same parameter from within the XSL document
(using document('') ) you will get the default value and, as far as I
can tell, you will be unable to self-reference any parameter and get
the non-default value.
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" version="4.0" encoding="iso-8859-1"
indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="test" select="'test1'"/>
<!-- default value = 'test1' -->
<xsl:template match="/">
<xsl:value-of select="document('')//xsl:param[@name='test']/@select" /
>
<!-- spit out whatever is in the select attribute of the param named
'test' within this document,
... will ALWAYS return 'test1' in gecko -->
<xsl:value-of select="$test" />
<!-- will return 'test1', unless set with setParameter (or by setting
parameters any other way)
then it will be whatever it was set to -->
</xsl:template>
</xsl:stylesheet>
The thing that makes me incredibly sad about this is that I developed
my code in IE (make it work in IE, gecko never fails -- that's my
moto) and sure enough, I can get it to work in IE -- just not in
gecko.
Sooo in trying to get this to work, I removed the usage of the
XSLTProcessor.setParameter function and went straight to the XML
source of the XSL file and set the parameter there... e.g.
function setParam( param, value ) {
xsl.documentElement.selectSingleNode("//xsl:param[@name='"+param+"']/
@select").nodeValue="'"+value+"'";
} -- of course i needed to grab my handy prototyped selectSingleNode
function to try that out
So after trying this call:
setParam( "test", "test2");
the alert of the XML source prior to translation clearly shows:
<xsl:param name="test" select="'test2'"/>
BUT the: <xsl:value-of select="document('')//xsl:param/
[@name='test']/@select" />
inside the for loop STILL returned the default value of 'test1' !
A bug? By design? Bug by pushing limits of the design? who knows...
it's probably a bad idea to do self-referential stuff anyway.