0

xqueryを使用してexist-db内のキーワードを検索することは可能ですか?

使ってみました

//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]

ただし、equalsの代わりにcontains()を使用する場合は、明らかに考慮すべき問題があります。また、例で説明したようにパスが常に制約され、それらのいずれかが真であるかどうかを確認するだけの場合(実際にすべての要素を取得するのではなく)、これはより高速で効率的なクエリになるはずです。 :

((//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 に答える