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="http://www.w3.org/1999/XSL/Transform"; version="2.0"
xmlns:saxon="http://saxon.sf.net/"; 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)"/>
   </xsl:template>
</xsl:stylesheet>

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:

<gmi:MI_Metadata
xmlns:gmi="http://www.isotc211.org/2005/gmi";
xmlns:gco="http://www.isotc211.org/2005/gco";
xmlns:gmd="http://www.isotc211.org/2005/gmd";
xmlns:xlink="http://www.w3.org/1999/xlink";
xsi:schemaLocation="http://www.isotc211.org/2005/gmi http://www.ngdc.noaa.gov/metadata/published/xsd/schema.xsd";>
<gmd:fileIdentifier>
<gco:CharacterString>gov.noaa.nosa:NESDIS-IONOSONDE</gco:CharacterString>
</gmd:fileIdentifier>
</gmi:MI_Metadata>


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

Thanks so much,
--Rich



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


http://www.w3.org/TR/xslt-21/#element-evaluate

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.

http://www.saxonica.com/documentation/extensions/functions/evaluate.xml

Michael Kay
Saxonica

Current Thread