RE: [xsl] Match document node of source document only?

Subject: RE: [xsl] Match document node of source document only?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 22 May 2008 14:43:45 +0100
Either:

(a) Use modes

(b) apply-templates to the outermost element rather than to the document
node

(c) use a more specific pattern for the document node:
match="document-node(element(whatever))" 

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Mark Lundquist [mailto:lundquist.mark@xxxxxxxxx] 
> Sent: 22 May 2008 14:39
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Match document node of source document only?
> 
> Hi,
> 
> I've got a template where I have to do this trick (in XSLT 2.0):
> 
> 	<xsl:variable name="foo">
> 		<whatever>
> 			blah blah blah...
> 		</whatever>
> 	</xsl:variable>
> 	<xsl:apply-templates select="$foo"/>
> 
> This is in order to apply some transform (e.g., from an imported
> stylesheet) to sequences that originate in the stylesheet, 
> not in the source document.  My problem is that I also have 
> this template:
> 
> 	<xsl:template match="/">
> 		...
> 
> which is meant to transform the document node of the source 
> document, but the result tree fragment defined by variable 
> foo also has a document node, so now when I 
> <xsl:apply-templates select="$foo"/>, this template also 
> matches that result tree fragment document node and 
> transforms it.  Bleah!!!  How do I write a template that 
> matches the document node of the source document only?
> 
> I could do
> 
> 	<xsl:variable name="root" select="/"/>
> 
> 	<xsl:template match="/[. = $root]">
> 
> but that's really hacky and seems like it should not be necessary.   
> Any ideas?
> 
> cheers,
> -ml-

Current Thread