This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: catch from another node with the same id (NEWBIE)
- From: TSchutzerWeissmann at uk dot imshealth dot com
- To: xsl-list at lists dot mulberrytech dot com
- Date: Tue, 10 Sep 2002 12:10:39 +0100
- Subject: RE: [xsl] catch from another node with the same id (NEWBIE)
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi Thomas
[snip]
>
> instead of the "id" i need the product name (bezeichnung) which is
> stored in a completly different node "/page/info/produkte/"
> but with the
> correspondending "id"
> <page>
> <info>
> <produkte>
> <produkt id="1" bezeichnung="Produkt A">
> <text>Produktebeschrieb A</text>
> </produkt>
> <produkt id="2" bezeichnung="Produkt B">
> <text>Produktebeschrieb B</text>
> </produkt>
> <produkt id="3" bezeichnung="Produkt C">
> <text>Produktebeschrieb C</text>
> </produkt>
> ........
> </produkte
> </info>
> </page>
>
> can I use some kind of variable to do it? Or how do I get the
> correspondending "bezeichnung" attribute from the other node?
> Any hints?
Close - but you want a key rather than a variable.
Declare the key outside of any template.
<xsl:key name="productNameByID"
match="info/produkte/produkt"
use="@id"/>
This will let you "catch" nodes in the document that are matched
by the match expression, using their id attribute.
You use the key inside your for-each like so:
<fo:block>
<!-- <xsl:value-of select="@id"/> -->
<xsl:value-of select="key('productNameByID',@id)/@bezeichnung"/>
</fo:block>
Keys also speed things up considerably and are used for grouping.
Have fun.
Tom
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list