Subject: RE: 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: 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-
|