2012-11-07 63 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應短路時其中的任何一個返回值的表達式。