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

Re: evaluate() error variable has not been declared??

Subject: Re: evaluate() error variable has not been declared??
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Mon, 10 May 2004 21:52:34 +0100
string has not been declared
Hi David,

> Why does the following test give error suggesting "Variable $test
> has not been declared", when it obviously has?

The reason that you're getting an error message is that you're asking
Saxon to evaluate the XPath:

  /test/$test/text()

This is illegal in XSLT 1.0, but legal in XSLT 2.0 as long as $test
evaluates to a sequence of nodes. Saxon is complaining because when it
evaluates a string as an XPath, it resets the variable bindings that
it knows about: the only variable references you can use are $p1, $p2
and so on, these being variables set by passing extra arguments to the
saxon:evaluate() function. So you could do something like:

  saxon:evaluate('/test/$p1/text()', $test)

but this won't give you what you want either, because it's asking for
the text node child of the node held by $test, which is the text node
child of the <input> element. The final result is therefore an empty
sequence.

What you want, I think, is to evaluate the XPath:

  /test/result/text()

but you want the step "result" to come from the value of the $test
variable. What you need to do is construct a string containing the
XPath you want using the concat() function:

  concat('/test/', $test, '/text()')

and then evaluate it.

By the way, there's no need to have the final step "/text()" in either
of the paths that you're using. Just setting the variable $test with
the XPath:

  /test/input

will give you the same result, and the code is a little cleaner (and
more robust in the face of mixed content, processing instructions and
comments in the XML).

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

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.