RE: [xsl] Keys off of variable xml source

Subject: RE: [xsl] Keys off of variable xml source
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 1 Apr 2005 18:12:11 +0100
That should be

<xsl:key name="k" match="entry" use="@code"/>

and

<xsl:attribute name="value">
  <xsl:value-of select="key('k', $code)/@value"/>
</xsl:attribute>

MK 

> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx] 
> Sent: 01 April 2005 18:01
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Keys off of variable xml source
> 
>  
> > 
> > The reason for a lookup xml source is to act as a cross-reference to
> > data in the main xml source.  So, I need to reference all elements
> > who's ID = 123 but my match is expressed as a code value "abc".  The
> > code "abc" maps to 123 in my lookup.
> 
> > So, I'm still scratching my head wondering how I might 
> effectively put
> > the external file to use with keys, but thinking it won't work, the
> > context would strictly be of the main xml source.
> 
> I'm not sure which part of the explanation you didn't understand.
> 
> lookup.xml
> 
> <lookup>
>  <entry code="abc" value="123"/>
>  <entry code="xyz" value="987"/>
> </lookup>
> 
> main.xml
> 
> <data>
>   <reading code="abc"/>
> </data>
> 
> required output
> 
> <data>
>   <reading value="123"/>
> </data>
> 
> stylesheet
> 
> <xsl:transform ....
> 
> <xsl:key name="k" match="entry" use="code"/>
> 
> <xsl:template match="*">
>   <xsl:copy><xsl:copy-of 
> select="@*"/><xsl:apply-templates/></xsl:copy>
> </xsl:template>
> 
> <xsl:template match="reading">
>   <reading>
>     <xsl:variable name="code" select="@code"/>
>     <xsl:for-each select="document('lookup.xml')">
>       <xsl:attribute name="value"><xsl:value-of 
> select="key('k', $code)"/>
>     </xsl:for-each>
>   </reading>
> </xsl:template>
> 
> or in 2.0
> 
> <xsl:template match="reading">
>   <reading value="{key('k', @code, document('lookup.xml'))}"/>
> </xsl:template>
> 
> Michael Kay
> http://www.saxonica.com/

Current Thread