2012-11-07 39 views
0

是否有可能使用xquery在存在数据库中搜索关键词?xquery儿童全搜索文本

我使用

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

尝试,但因为这不符合我的版本存在-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

这些任选其一:

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

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

不过,也有明显使用含有时要考虑的问题()而不是平等。另外,如果路径总是受限于您在示例中描述的内容,并且您只是检查是否有其中的任何一个是真实的(而不是实际获取所有元素),那么这应该是一个更快,更高效的查询:

((//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应短路时其中的任何一个返回值的表达式。