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: "Vladimir Nesterovsky" <vladimir@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 11 May 2009 22:23:18 -0700
> 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)

I can advice on template to resolve variable indirectly:

<xsl:variable name="A" select="100"/>
<xsl:variable name="B" select="BBB"/>

<xsl:template mode="t:get-var" match="A">
  <xsl:sequence select="$A"/>
</xsl:template>

<xsl:template mode="t:get-var" match="B">
  <xsl:sequence select="$A"/>
</xsl:template>

...

<xsl:variable name="VAR" as="element()">
  <xsl:element name="{$var}"/>
</xsl:variable/>

<xsl:variable name="value" as="item()">
  <xsl:apply-templates mode="t:get-var" select="$var"/>
</xsl:variable>

--
Vladimir Nesterovsky
http://www.nesterovsky-bros.com/

Current Thread