[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

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

Subject: Re: 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
Re:  How to pass an XPath as a param and evaluate it?
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.