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
From the Saxon documentation: http://www.saxonica.com/documentation/using-xsl/commandline.xml
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.
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:
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