Re: [xsl] How to pass an XPath as a param and evaluate it?

Subject: Re: [xsl] How to pass an XPath as a param and evaluate it?
From: Richard Fozzard <Richard.Fozzard@xxxxxxxx>
Date: Wed, 29 Jun 2011 17:33:37 -0600
Mike et al,

Cool! Thanks for all the prompt help on this.

I was able to get a general-purpose "XML fragment extractor" working with a very simple stylesheet:

<xsl:stylesheet xmlns:xsl=""; version="2.0"
xmlns:saxon=""; exclude-result-prefixes="saxon">
<!--Return a fragment of the input XML specified by the xpath string passed in. -->

   <xsl:output method="xml" indent="yes"/>
   <xsl:param name="xpath"/> <!-- passed on command line as a param -->

   <xsl:template match="/">
           <xsl:copy-of select="saxon:evaluate($xpath)"/>

This works fine on default namespaces, but I gather that if my input document has namespaces, I have to statically declare those in my stylesheet?

E.g. I am working with input XML like this:


Is there any way for the stylesheet to "use" the namespaces in the input XML?

Thanks so much,

Michael Kay said the following on 06/29/2011 02:35 AM:

Is there a function or syntax in XSLT 1 or 2 that will evaluate the XPath at run-time?

No, but there is in XSLT 3.0 (formerly known as XSLT 2.1). See

To use this in Saxon 9.3 you will need to activate XSLT 3.0 using -xsltversion:3.0

Come to think of it, I think that might require Saxon-EE. In Saxon-PE you might have to fall back to the saxon:evaluate() extension.

Michael Kay

Current Thread