xquery儿童的完整搜索文本

时间:2012-11-07 17:05:40

标签: full-text-search xquery exist-db

是否可以使用xquery搜索exists-db中的关键字?

我尝试过使用

//foo//@val[. &= $param]

但是这会返回错误,因为我的版本的exists-db(1.4.2)不支持

在多个节点上进行搜索的最佳方法是什么?

<xml>
   <foo @val='test1'>
   <bar @val='test2'>
       <thunk @val='test3'/>
   </bar>
   </foo>

因此,使用我的示例XML,我该怎么做

let $result :=

if //xml/foo[contains(@val,$param)] or
//xml/foo/bar[contains(@val,$param)] or
//xml/foo/bar/thunk[contains(@val,$param)]

return $result

1 个答案:

答案 0 :(得分:1)

其中任何一个都应该有效:

//foo//@val[contains(.,$param)]

//foo//@val[. eq $param]

但是,使用contains()而不是equals时,显然需要考虑一些问题。此外,如果您的示例中描述的路径将始终受到限制,并且您只是检查是否有任何一个是真的(而不是实际获取所有元素),那么这应该是一个更快,更有效的查询:

((//xml/foo[@val eq $param])[1] or (//xml/foo/bar[@val eq $param])[1] or (//xml/foo/bar/thunk[@val eq $param])[1])

未经测试,但是[1]应该在从查询中获得第一个结果后使xpath求值程序短路,并且当它们中的任何一个返回值时,OR应该使表达式短路。