0

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?

jpleal
  • 161
  • 7

1 Answers1

0

I've spent two days fighting with it. Adding "*" namespace to xPath solved the issue for me (my input file did not have any).

return <label>{fn:doc(fn:concat($collection, '/', $child))//*:testResult/text()}</label>
user6419217
  • 59
  • 10