I am using eXist-db Version: 1.4.1 (SVN Revision: 15155, Build: 20110815) and I am having problems in XQuery queries with XPath expressions when they involve names of elements or attributes, and XML data comes from the doc() function. I tested the following queries in the XQuery SandBox.
The following query in XQuery
xquery version "1.0";
let $data := <users>
<user id="1" gender="male">Jon Doe</user>
<user id="2" gender="female">Jane Smith</user>
<user id="3" gender="male">Some Guy</user>
<user id="4" gender="female">Some Gal</user>
</users>
return $data//user[@gender="female"]
Produces the expected result.
<user id="2" gender="female">Jane Smith</user>
<user id="4" gender="female">Some Gal</user>
However, if I move the XML data to the file /db/test.xml in eXists (with this content)
<users>
<user id="1" gender="male">Jon Doe</user>
<user id="2" gender="female">Jane Smith</user>
<user id="3" gender="male">Some Guy</user>
<user id="4" gender="female">Some Gal</user>
</users>
and execute the query
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data//user[@gender="female"]
the result is the empty set!
The weird part is that I manage to obtain the expected result if I omit the names of elements and attributes, as in this query
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data//*[@*="female"]
It even works if I use XPath axis instead of abbreviations
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data/descendant-or-self::node()/child::*[attribute::*="female"]
I manage also to list all the texts in the XML file with
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data//text()
But it simply doesn't work if I use names of elements or attributes in XPath expressions
This does look like a bug but I may be missing something. Could someone point me to what I am doing wrong?