2008-09-17 10 views

Respuesta

22

A partir de XQuery 1.1, utilice el interruptor:

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

XQuery no tiene una función para encender nada que no sean elementos.

Lo primero que debe hacer es convertir su cadena en un elemento.

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

Entonces sólo tiene que utilizar typeswitch hacer un interruptor normal:

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

Tenga en cuenta, esto puede ser una única solución MarkLogic.

+1

Esta solución (debería) funciona en cualquier procesador de xquery, pero no es tan clara como la sencilla anidada si la solución. –

+0

Solo odio anidar si. Me gusta el ejemplo de XQuery 1.1, así que lo marqué como la respuesta. – Sixty4Bit

3

sólo tiene que utilizar una serie de expresiones: si

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

El uso de un typeswitch se esconde lo que realmente está haciendo.

Cuál de estos métodos es más eficiente dependerá del procesador XQuery que esté utilizando. En un mundo ideal, solo debería ser una cuestión de gusto, ya que el optimizador debe seleccionar el método apropiado, pero si el rendimiento es importante, vale la pena comparar ambas versiones. Me sorprendería mucho que un procesador optimizara la construcción de nodos de su ejemplo y no optimizara mi ejemplo para un conmutador especializado.

+0

A veces es agradable y elegante ocultar lo que realmente hace si no olvida que lo está haciendo ... – Ar3s

+0

Abajo he votado esto porque la pregunta está tratando de encontrar la sintaxis de switch/case not if/else. – Sixty4Bit

+0

@ Sixty4Bit - Cuando respondí la pregunta, no se finalizó el comportamiento del cambio, ¡por eso publiqué mi segunda respuesta en febrero! –

2

Si el procesador es compatible XQuery 1.1, a continuación, sólo tiene que hacer:

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