This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: string table lookup w/ and w/o temporary variable
- From: Jeni Tennison <jeni at jenitennison dot com>
- To: Bernd Gauweiler <bernd at gauweiler dot net>
- Cc: XSL-List at lists dot mulberrytech dot com
- Date: Wed, 14 Aug 2002 10:42:55 +0100
- Subject: Re: [xsl] string table lookup w/ and w/o temporary variable
- Organization: Jeni Tennison Consulting Ltd
- References: <16440894963.20020814075515@gauweiler.net>
- Reply-to: xsl-list at lists dot mulberrytech dot com
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