RE: [xsl] key() and document() - scoping problem?

Subject: RE: [xsl] key() and document() - scoping problem?
From: "Geert Josten" <geert.josten@xxxxxxxxxxx>
Date: Wed, 20 Dec 2006 08:16:54 +0100
If you want the span elements to repeat by the number of option elements
and not just one like here:

> It looks to me as though you want:
>
> <span class="x">
>    <xsl:value-of select="count(key('key2_1', 'general'))" />
> </span> <xsl:variable name="option-keys"
>    select="document(string($options))/options/option">
> <span class="y">
>    <xsl:value-of select="count(key('key2_1', $option-keys))"
> /> </span>
>
> Or something of that sort.
>
> It happens that keys can also take node sets as arguments to
> provide multiple values at once. As you can see, this can be
> useful. (I use a variable for clarity but you could just
> throw the document() query straight into the call to key() if
> you wanted.)

You could do something like the following in XSLT 1.0 , but it is not
very nice:

Top-level:

<xsl:variable name="this-document" select="/" />

<xsl:template ...>
  <span class="x">
    <xsl:value-of select="count(key('key2_1', 'general'))" />
  </span>
  <xsl:for-each select="document(string($options))/options/option">
    <xsl:variable name="$option" select="." />
    <span class="y">
      <xsl:for-each select="$this-document">
        <xsl:value-of select="count(key('key2_1', $option))" />
      </xsl:for-each>
    </span>
  </xsl:for-each>
</xsl:template>

I put the option element in a variable to show how its value can be used
as a parameter of the 2nd key function

HTH!

Kind regards,
Geert


Drs. G.P.H. Josten
Consultant



Daidalos BV
Source of Innovation
Hoekeindsehof 1-4
2665  JZ  Bleiswijk
Tel.: +31 (0) 10 850 1200
Fax: +31 (0) 10 850 1199
www.daidalos.nl
KvK 27164984


De informatie - verzonden in of met dit emailbericht - is afkomstig van
Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit
bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit
bericht kunnen geen rechten worden ontleend.

Current Thread