Re: [xsl] string table lookup w/ and w/o temporary variable

Subject: Re: [xsl] string table lookup w/ and w/o temporary variable
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 14 Aug 2002 10:42:55 +0100
Hi Bernd,

> I can work out a template like this:
>
> <xsl:template match="name-string">
>    <xsl:variable name="s-id" select="@id"/>
>    <xsl:value-of select="/root/strings/string[@id=$s-id]"/>
> </xsl:template>
>
> This works perfect for me. I couldn't work out a working expression
> without the variable "s-id", but I wonder if that variable is really
> required?

Within the template, the "current node" is the name-string element --
that's the one the template's processing. You can always get hold of
this current node, even if you're within a predicate, using the
current() function. So your alternative is:

<xsl:template match="name-string">
  <xsl:value-of select="/root/strings/string[@id = current()/@id]" />
</xsl:template>

The other thing that you could do is to set up a key that enabled you
to jump to the string elements you were interested in quickly. This is
a good idea if you have lots of name-string elements that you want to
dereference. Set up the key to match the string elements and use their
id attributes:

<xsl:key name="strings" match="string" use="@id" />

then you can get the value by calling the key; since you don't use a
predicate with this method, you don't need a variable or to use the
current() function, just:

<xsl:template match="name-string">
  <xsl:value-of select="key('strings', @id)" />
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread