[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: [XSLT 2.0] Creating a changeable globally scoped v
Hi Roger, > 2. Create a range variable with a sequence of values. From reading the > specs this seemed promising. Here's an example of how this might work: > > <xsl:template match="/"> > <xsl:value-of select="for $i in (1 to 10) return (ex:print())"/> > </xsl:template> > > <xsl:function ex:print"> > <xsl:value-of select="$i"/> > </xsl:function> > > From reading the specs I got the impression that the range variable > ($i) would have a scope over everything within "return (...)". In my > example, within the return is a call to a function. I was thinking > that the range variable's scope would extend to the ex:print > function. Alas, it doesn't (unless there is a bug in SAXON). The variable's scope is *lexically* within the return expression, so you can use the variable reference $i within that expression, but you can't use it elsewhere (such as the body of the function). The same is true at the XSLT level: declaring a variable in one template does not make it available in any other template, even those called from it. If you just want to print the values 1 to 10 via a function, pass the value of $i into the ex:print() function as a parameter: <xsl:template match="/"> <xsl:value-of select="for $i in (1 to 10) return (ex:print($i))"/> </xsl:template> <xsl:function name="ex:print"> <xsl:param name="i" /> <xsl:value-of select="$i"/> </xsl:function> But as others have said, you can't update a variable in XSLT, and saying that you want to is usually a sign that you're approaching a problem in an inappropriate way. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|