Of course, duh! And that explains why the let expression worked - because the value of $p was evaluated using the root context before the axis steps started to be taken. But what about the case with the for expression...
Query: for $p in count(./preceding-sibling::*)+1 return /test/a/ab/*[$p] Result: <aba><abb><abc> (was expecting just <abb> as before)
Is the value of $p not evaluated until it's used from within the return?
Thanks again,
Dave
-----Original Message----- From: Christian Grün [mailto:christian.gruen@gmail.com] Sent: Wednesday, June 23, 2010 10:37 AM To: Dave Glick Cc: basex-talk@mailman.uni-konstanz.de Subject: Re: [basex-talk] Another Bug
Dave,
... (I promise I don't spend my whole day sitting around thinking of ways to break Basex) ...
Feel free to do so - we'll benefit ;)
The test XML is at the bottom of this message. I'm not sure how to classify this bug, but consider the results of the following queries with the initial context set to <bbb>.
[...]
Query: /test/a/ab/*[count(./preceding-sibling::*)+1] Result: <aba><abb><abc> (was expecting just <abb> as before)
This time, the answer is correct, as the context item expression (.) refers to the three context items, respectively, which result from the location path: <aba/>, <abb/>, and <abc/>.
Hope this helps, Christian
This problem also appears to affect FLOWR expressions when using "for" but not "let"...
Query: let $p := count(./preceding-sibling::*)+1 return /test/a/ab/*[$p] Result: <abb> (as expected)
Query: for $p in 2 return /test/a/ab/*[$p] Result: <abb> (as expected)
Query: for $p in count(./preceding-sibling::*)+1 return /test/a/ab/*[$p] Result: <aba><abb><abc> (was expecting just <abb> as before)
Text XML:
<test> <a> <aa/> <ab> <aba/> <abb/> <abc/> </ab> <ac/> </a> <b> <ba/> <bb> <bba/> <bbb/> <bbc/> </bb> <bc/> </b> </test> _______________________________________________ BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk