Subject: Re: [xsl] evaluate() error variable has not been declared?? From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Mon, 10 May 2004 21:52:34 +0100 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] evaluate() error variable has, davidpbrown | Thread | RE: [xsl] evaluate() error variable, Michael Kay |
RE: Re: [xsl] Create new functions, cknell | Date | RE: [xsl] problem: recursive templa, Michael Kay |
Month |