xsl-list
[Top] [All Lists]

Re: xsl:key on variable containing result of apply-templates

2002-11-25 10:24:03
Jorge,
I mistyped your solution when I tried it first - sorry! After a good night's rest I tried it again and it works perfectly!
Thank you, this had been a big help.
Grainne.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:saxon="http://icl.com/saxon";
xmlns:exsl="http://exslt.org/common";
extension-element-prefixes="exsl saxon">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        
<xsl:key name="alphabetKey" match="newAlphabet" use="@col"/>
<xsl:variable name="alphabet">
        <xsl:apply-templates select="/test/alphabetList/alphabet"  
mode="loadList"/>
</xsl:variable>
<xsl:variable name="alphabet-exslNodeSet" select="exsl:node-set($alphabet)"/>

<xsl:template match="numbers">
   <xsl:for-each select="number">
     <xsl:variable name="curPosition" select="position()"/>
     <xsl:for-each select="$alphabet-exslNodeSet">
       <!-- NB context changed to converted node set -->
       <xsl:copy-of select="key('alphabetKey', $curPosition)"/>
     </xsl:for-each>
   </xsl:for-each>
</xsl:template>

<xsl:template match="/">
   <xsl:apply-templates select="test/numbers"/>
</xsl:template>

<xsl:template match="alphabet" mode="loadList">
        <newAlphabet col="{(_at_)col}"><xsl:value-of select="."/></newAlphabet>
</xsl:template>

</xsl:stylesheet>


>..<snip/>...
> The key declaration must be then:
> <xsl:key name="alphabets" match="alphabet" use="@col"/>
>
> And later the usage of key():
> <xsl:template match="numbers">
>    <xsl:for-each select="number">
>            <xsl:variable name="curPosition" select="position()"/>
>            <xsl:for-each select="$alphabet-exslNodeSet">
>                    <!-- context changed to converted node set -->
>                    <xsl:copy-of select="key('myKey', $curPosition)"/>
>            </xsl:for-each>
>    </xsl:for-each>
></xsl:template>
>...<snip/>...


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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