Wie wechselt man an einer Schnur in XQuery?
-
01-07-2019 - |
Frage
Ich habe eine externe Variable als String kommen und ich möchte einen Schalter / Fall auf, es zu tun. Wie mache ich das in xquery?
Lösung
Beginnend mit XQuery 1.1, Verwendung Schalter:
http://www.w3.org/TR/xquery-11 / # id-Schalter
switch ($animal)
case "Cow" return "Moo"
case "Cat" return "Meow"
case "Duck" return "Quack"
default return "What's that odd noise?"
Andere Tipps
Nur eine Reihe von if Ausdrücke verwenden:
if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen") then "scullery"
else "just a room"
Mit einem typeswitch versteckt, was Sie wirklich tun.
Welche dieser Methoden ist am effizientesten auf dem XQuery-Prozessor ab, die Sie verwenden. In einer idealen Welt sollte es nur eine Frage des Geschmacks, da es bis auf den Optimierer sollte die geeignete Methode zu wählen, aber wenn Leistung wichtig ist, lohnt es sich, beide Versionen Benchmarking. Ich wäre sehr überrascht, wenn ein Prozessor die Knotenkonstruktion aus Ihrem Beispiel optimiert, und nicht meinem Beispiel zu einem spezialisierten Schalter optimieren.
XQuery keine Funktion hat zum Umschalten auf etwas anderes als Elemente.
Das erste, was Sie tun, ist die Zeichenfolge auf ein Element umwandeln.
let $str := "kitchen"
let $room := element {$str} {}
Dann nur typeswitch verwenden, um einen normalen Schalter zu tun:
return typeswitch($room)
case element(bathroom) return "loo"
case element(kitchen) return "scullery"
default return "just a room"
Bitte beachten Sie, kann diese einzige Lösung, ein Marklogic sein.
Wenn Ihr Prozessor unterstützt XQuery 1.1, dann können Sie einfach tun:
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"
Für Saxon, Sie so etwas wie diese verwenden können:
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;"
};
Grüße,
http://rrusin.blogspot.com/2010 /01/embedding-xquery-in-java.html