Question

J'ai une variable externe qui arrive sous forme de chaîne et je voudrais faire un switch / case dessus. Comment puis-je faire cela dans xquery?

Était-ce utile?

La solution

À partir de XQuery 1.1, utilisez le commutateur:

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?" 

Autres conseils

Utilisez simplement une série d'expressions if:

if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen")  then "scullery"
else "just a room"

Utiliser un commutateur de type cache ce que vous faites vraiment.

Laquelle de ces méthodes est la plus efficace dépendra du processeur XQuery que vous utilisez. Dans un monde idéal, cela ne devrait être qu'une question de goût. L'optimiseur doit choisir la méthode appropriée. Toutefois, si les performances sont importantes, il convient de comparer les deux versions. Je serais très surpris qu'un processeur optimise la construction du nœud à partir de votre exemple et n'optimise pas mon exemple pour un commutateur spécialisé.

XQuery n’a pas de fonction pour activer autre chose que des éléments.

La première chose à faire est de convertir votre chaîne en élément.

let $str := "kitchen"
let $room := element {$str} {}

Il suffit ensuite d'utiliser un commutateur de type pour effectuer un changement normal:

return typeswitch($room)
  case element(bathroom) return "loo"
  case element(kitchen) return "scullery"
  default return "just a room"

Veuillez noter qu'il peut s'agir d'une solution uniquement MarkLogic.

Si votre processeur prend en charge XQuery 1.1, vous pouvez simplement faire:

switch ($room) 
  case "bathroom" return "loo"
  case "kitchen" return "scullery"
  default return "just a room"

Pour Saxon, vous pouvez utiliser quelque chose comme ceci:

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;"
};

Cordialement,

http://rrusin.blogspot.com/2010 /01/embedding-xquery-in-java.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top