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

Re: Evaluate string as XPATH axis in XSLT1.0?

Subject: Re: Evaluate string as XPATH axis in XSLT1.0?
From: Matt Poff <matt.poff@xxxxxxxxxxxxxxx>
Date: Tue, 21 Aug 2007 11:58:18 +1200
Re:  Evaluate string as XPATH axis in XSLT1.0?
Great thanks, as I'm using the EXSLT library elsewhere in the transform I found the dyn:evaluate() function. The problem now is my XPATH string contains apostrophes which I can't seem to escape adequately for dyn:evaluate() to not throw errors.

The string is of the form:

./foo[@type = 'bar']

I've tried the following XSLT char escaping options expressions:

[One]
<xsl:variable name="testmap" select="dyn:evaluate('./foo[@type = 'bar']')"/>

Result: Error = "expected ")", found "<name>"

[Two]
<xsl:variable name="testmap" select="dyn:evaluate('./foo[@type = &apos;bar&apos;]')"/>


Result: Error = "expected ")", found "<name>"



[Three]
<xsl:variable name="testmap" select="dyn:evaluate('./foo[@type = \\&apos;bar\\&apos;]')"/>


Result: Error = "expected ")", found "<name>"



[Four]
<xsl:variable name="x">'</xsl:variable>
<xsl:variable name="testmap" select="dyn:evaluate(concat('./foo[@type = ',$x, 'bar',$x,']'))"/>


Result: Parses OK but value is empty.

If I reference this path directly without using evaluate, the correct node-set is returned. It seems like dyn:evaluate isn't handling embedded apostrophes but I couldn't Google any workarounds for it.

Matt



Michael Kay wrote:
There's no standard way to construct an XPath expression from a string at
run-time in either XSLT 1.0 or 2.0.


Some products have an extension to do this, for example saxon:evaluate().

If you want a portable solution, the only way around it is to generate a
stylesheet.

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: Matt Poff [mailto:matt.poff@xxxxxxxxxxxxxxx] Sent: 20 August 2007 06:58
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Evaluate string as XPATH axis in XSLT1.0?


Hi,

I'm trying to resolve a node attribute which contains an XPATH fragment to actually resolve that path to a value. Is this possible.

XML with attribute looks like...

<grid-map map="./foo[@bar]/select" />


XSLT looks like... <xsl:variable name="path" select="../grid/grid-map[1]/@map"/> <xsl:value-of select="{$path}" />

Unfortunately, this results in errors... Any ideas?

Thanks in advance,
Matt

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-2013 All Rights Reserved.