eXist-db XQuery Sandbox:带有doc()的XPath表达式中的问题

时间:2013-05-25 16:21:24

标签: xpath xquery exist-db

我正在使用eXist-db版本:1.4.1(SVN修订版:15155,版本:20110815),当我们涉及元素或属性的名称时,我在使用XPath表达式的XQuery查询时遇到问题,并且XML数据来自doc()函数。我在XQuery SandBox中测试了以下查询。

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"]

产生预期结果。

<user id="2" gender="female">Jane Smith</user>
<user id="4" gender="female">Some Gal</user>

但是,如果我将XML数据移动到eXists中的文件/db/test.xml(包含此内容)

<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>

并执行查询

 xquery version "1.0";
 let $data := doc("/db/test.xml")
 return $data//user[@gender="female"]

结果是空集!

奇怪的是,如果省略元素和属性的名称,我设法获得预期的结果,如在此查询中

xquery version "1.0";
let $data := doc("/db/test.xml")
return $data//*[@*="female"]

如果我使用XPath轴而不是缩写

,它甚至可以工作
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data/descendant-or-self::node()/child::*[attribute::*="female"]

我还设法用

列出XML文件中的所有文本
xquery version "1.0";
let $data := doc("/db/test.xml")
return $data//text()

但如果我在XPath表达式中使用元素或属性的名称

,它根本不起作用

这看起来像一个bug,但我可能会遗漏一些东西。有人能指出我做错了吗?

1 个答案:

答案 0 :(得分:0)

我花了两天时间与它作斗争。 添加&#34; *&#34;命名空间到xPath解决了我的问题(我的输入文件没有)。

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