RE: [xsl] [xls] run-time variable name generation (e.g. "double de-referencing" {$($name)} )

Subject: RE: [xsl] [xls] run-time variable name generation (e.g. "double de-referencing" {$($name)} )
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 11 May 2009 00:00:03 +0100
No, you can't do this. (I can't think of any language where you can, except
some languages where variables are nothing more than macros, e.g. some OS
script languages).

Take a look at FXSL, which allows you to simulate higher-order functions. If
you replace your variables with zero-argument functions, then you can
effectively pass the function around as a first-class value. 

Real higher-order functions have now been defined and accepted for inclusion
in XQuery 1.1 and I think it's likely that a future XSLT version will follow
suit (though the decisions haven't yet been made).

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 

 

> -----Original Message-----
> From: Mtekel [mailto:thx@xxxxxxxxx] 
> Sent: 10 May 2009 23:45
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] [xls] run-time variable name generation (e.g. 
> "double de-referencing" {$($name)} )
> 
> Hello,
> 
> I have a question again, this time concerning variables.
> Can I generate variable name run-time?
> Let's say I have:
> 
> <xsl:variable name="A" select="100"/>
> <xsl:variable name="B" select="BBB"/>
> 
> <xsl:variable name="var" select="'A'"/>
> <xsl:variable name="VAR" select="concat('$',$var)"/>
> 
> and now I would like this	(or what else could I use that 
> would work?)
> 
> <xsl:value-of select="$VAR"/>
> 
> would give output 100, not $A 
> 
> Is this possible or doable any way?
> Maybe with some other type than variables?
> Or with some other methods at all?
> 
> (From functional lang. point of view this is st. like 
> dereferencing double
> pointer: the first points to variable name, the variable name 
> then points to
> data)
> 
> 
> Once again, 
> 
> Thanks for any advice.
> 
> Michael

Current Thread