xsl-list
[Top] [All Lists]

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

2011-06-29 18:33:48
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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--