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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top