Declare a global variable
<xsl:variable name="main-doc" select="/"/>
And then write the key() call as
$main-doc/key('k', $ObjectName/Name)
Since this is an XPath 2.0 construct, I'd suggest changing your stylesheet
to say version="2.0" so everyone knows it depends on a 2.0 processor. In
1.0, you have to use
<xsl:for-each select="$main-doc">
.. key('k', $ObjectName/Name)
</xsl:for-each>
Michael Kay
# -----Original Message-----
# From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-
# list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of Colin Toal
# Sent: 09 March 2004 21:45
# To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
# Subject: [xsl] Root when the current node is part of Parameter Result Tree
# Fragement/Nodelist
#
# Hi all,
#
# I hope I'm not breaking etiquette, but I could not find an answer to this
# in
# the FAQ or archives.
#
# I have an XML source document like this:
#
# <Objects>
# <Object>
# <Name>Toothbrush</Name>
# <Type>Electric</Type>
# <Colour>White</Type>
# </Object>
# <Object>
# <Name>Soap Dish</Name>
# <Type>Plastic</Type>
# <Colour>Blue</Colour>
# <Object>
# </Objects>
#
# I process it with a stylesheet like this:
#
# <?xml version="1.0" encoding="UTF-8"?>
# <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
# version="1.1">
# <xsl:key name="kObject" match="Object" use="Name"/>
# <xsl:param name="ObjectName" />
# <xsl:param name="OtherExpr" />
#
# <xsl:template match="/Objects">
# <FoundObject>
# <xsl:apply-templates select="key('kObject', $ObjectName/Name)"/>
# </FoundObject>
# </xsl:template>
#
# <xsl:template match="Object">
# <xsl:copy-of select="."/>
# <xsl:apply-templates select="$OtherExpr/ParamColour"/>
# </xsl:template>
#
# <xsl:template match="ParamColour">
# <xsl:if test="current() = key('kObject', $ObjectName/Name)/Colour">
# Is the same colour!
# </xsl:if>
# </xsl:template>
#
# I process the XML document with this Stylesheet using SAXON 7.8 in Java,
# and
# I pass a DOMSource object into each of the parameters that looks like the
# following:
#
# For ObjectName Param
# <Name>Toothbrush</Name>
#
# For Other Expr Param:
# <ParamColour>White</ParamColour>
#
# The problem is that - within the context of the ParamColour matching
# template, the key object doesn't seem to be defined - in fact, even root
# of
# this context node ( i.e. <xsl:copy-of select="//" /> is only the Parameter
# contents. This makes me very sad.
#
# Is there a keyword or expression I can use to get the originally processed
# document while I am in the context of a node from an RTREEFRAG or external
# parameter nodeset ?
#
# Thanks in advance for your help,
# Colin Toal
#
# _________________________________________________________________
# MSN Premium with Virus Guard and Firewall* from McAfeeR Security : 2
# months
# FREE*
# http://join.msn.com/?pgmarket=en-
# ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http://hotmail.com/enca&HL=Market_
# MSNIS_Taglines
#
#
# XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list