xsl-list
[Top] [All Lists]

RE: catch from another node with the same id (NEWBIE)

2002-09-10 04:10:39
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



<Prev in Thread] Current Thread [Next in Thread>