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: Hank Ratzesberger <hankr@xxxxxxxx>
Date: Tue, 28 Jun 2011 21:29:50 -0700
Hi Rich,

 From the Saxon documentation:
http://www.saxonica.com/documentation/using-xsl/commandline.xml

java -jar/dir//saxon9he.jar [options] [params]

A/param/preceded by a leading plus sign (+) is interpreted as a filename
or directory. The content of the file is parsed as XML, and the
resulting document node is passed to the stylesheet as the value of the
parameter. If the parameter value is a directory, then all the
immediately contained files are parsed as XML, and the resulting
sequence of document nodes is passed as the value of the parameter. For
example,|+lookup=lookup.xml|sets the value of the stylesheet
parameter|lookup|to the document node at the root of the tree
representing the parsed contents of the file|lookup.xml|.

So you would need a file to pass the the complex content, anything that
is not a text value.

Best,
Hank


On 06/28/2011 04:13 PM, Richard Fozzard wrote:
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



--
Louis (Hank) Ratzesberger
sopac.ucsd.edu

Current Thread