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:01:01 +0100
> 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