我正在使用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,但我可能会遗漏一些东西。有人能指出我做错了吗?
答案 0 :(得分:0)
我花了两天时间与它作斗争。 添加&#34; *&#34;命名空间到xPath解决了我的问题(我的输入文件没有)。
return <label>{fn:doc(fn:concat($collection, '/', $child))//*:testResult/text()}</label>