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

Subject: [xsl] How to pass an XPath as a param and evaluate it?
From: Richard Fozzard <Richard.Fozzard@xxxxxxxx>
Date: Tue, 28 Jun 2011 17:13:16 -0600
Fellow XSLers,

How can I use a string param passed on the command line as an XPath?

E.g., if I have this XML:

<library>
   <book>
       <title>Bob</title>
   </book>
</library>

and I want to have a general-purpose XSL that I can pass an XPath to output any desired XML fragment. So I tried this:

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

   <xsl:template match="/">
           <xsl:copy-of select="$xpath"/>
   </xsl:template>

passing xpath="/library/book[title='Bob']". But of course, it just outputs this:

/library/book[title='Bob']

while I really wanted the node at that XPath:

<book>
     <title>Bob</title>
</book>

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

(BTW, I'm using SaxonPE 9.3 on Linux, if that matters.)

Thanks so much for any help!
--Rich

Richard Fozzard, Computer Scientist
 Geospatial Metadata at NGDC: http://www.ngdc.noaa.gov/metadata

Cooperative Institute for Research in Environmental Sciences (CIRES)
Univ. Colorado & NOAA National Geophysical Data Center, Enterprise Data Systems 325 S. Broadway, Skaggs 1B-305, Boulder, CO 80305
Office: 303-497-6487, Cell: 303-579-5615, Email: richard.fozzard@xxxxxxxx


Current Thread