This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Can keys go out of scope?
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Sat, 2 Mar 2002 10:00:33 -0000
- Subject: RE: [xsl] Can keys go out of scope?
- Reply-to: xsl-list at lists dot mulberrytech dot com
key() always selects nodes in the document containing the context node. You
problem is probably that you are calling it at a point where the context
node is in a different document (or temporary tree).
Usual circumvention (in XSLT 1.0) is
(a) define a global variable
<xsl:variable name="root" select="/"/>
(b) use key() within a for-each:
<xsl:for-each select="$root">
<xsl:.... select="key('a', 'b')"
</xsl:for-each>
With XPath 2.0 you can write
<xsl:.... select="$root/key('a', 'b')"
to switch documents.
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of
> TSchutzerWeissmann@uk.imshealth.com
> Sent: 01 March 2002 18:19
> To: xsl-list@lists.mulberrytech.com
> Subject: [xsl] Can keys go out of scope?
>
>
> I know keys can't go out of scope, I just want to know why
> I'm having to do
> this:
>
> <xsl:template match="Billcode">
> <xsl:variable name="current" select="."/>
> <xsl:apply-templates
> select="$template/sc:static/*" mode="static">
> <xsl:with-param name="current" select="$current"/>
> <xsl:with-param name="score"
> select="key('scores',@ScoreRef)"/> #I
> shouldn't need to do this
> </xsl:apply-templates>
> </xsl:template>
>
>
> The key only gets used at the other end of some chained
> templates, and I
> would have hoped to be able to do this:
> <xsl:value-of select="key('scores',$current/@ScoreRef)"/>,
>
> given that I'm passing the Billcode element down the chain in
> the $current
> parameter. I've been through this n times, it even works on a
> different
> stylesheet. I've tested the value of $current/@ScoreRef at
> every step of the
> way, and it's what it was in the first template shown above.
> Any idea what's
> going on (or, (@~!# as Captain Haddock would say)?
>
> Thanks for your help
> Tom
>
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list