文字列として入ってくる外部変数があり、それに対してスイッチ/ケースを実行したいと考えています。xqueryでそれを行うにはどうすればよいですか?
19828 次
5 に答える
25
XQuery 1.1 以降では、次のスイッチを使用します。
http://www.w3.org/TR/xquery-11/#id-switch
switch ($animal)
case "Cow" return "Moo"
case "Cat" return "Meow"
case "Duck" return "Quack"
default return "What's that odd noise?"
于 2010-05-04T16:19:41.650 に答える
4
一連のif式を使用するだけです。
if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen") then "scullery"
else "just a room"
タイプスイッチを使用すると、実際に行っていることを隠すことができます。
これらの方法のどれが最も効率的かは、使用しているXQueryプロセッサによって異なります。理想的な世界では、適切な方法を選択するのはオプティマイザーに任されているため、好みの問題である必要がありますが、パフォーマンスが重要な場合は、両方のバージョンのベンチマークを行う価値があります。プロセッサがあなたの例からノード構造を最適化し、私の例を特殊なスイッチに最適化しなかったとしたら、私は非常に驚きます。
于 2008-10-05T11:30:59.460 に答える
3
XQuery には要素以外を切り替える機能がありません。
最初に行うことは、文字列を要素に変換することです。
let $str := "kitchen"
let $room := element {$str} {}
次に、typeswitch を使用して通常の切り替えを行います。
return typeswitch($room)
case element(bathroom) return "loo"
case element(kitchen) return "scullery"
default return "just a room"
これは MarkLogic のみのソリューションである可能性があることに注意してください。
于 2008-09-17T17:47:44.767 に答える
3
プロセッサが XQuery 1.1 をサポートしている場合は、次のように簡単に実行できます。
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"
于 2010-02-14T18:02:41.237 に答える
1
Saxon の場合、次のようなものを使用できます。
declare function a:fn($i) {
typeswitch ($i)
case element(a:elemen1, xs:untyped) return 'a'
case element(a:elemen2, xs:untyped) return 'b'
default return "error;"
};
于 2010-01-18T02:42:28.273 に答える