0

是否可以使用 xquery 在存在数据库中搜索关键字?

我试过使用

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

但这会返回错误,因为我的exist-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
4

1 回答 1

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 应该短路表达式。

于 2012-11-07T19:28:24.600 回答