xml - comment - ¿Cómo se enciende una cadena en XQuery?
xquery html table (5)
Comenzando con XQuery 1.1, use 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?"
Tengo una variable externa entrando como una cadena y me gustaría hacer un cambio / caso en ella. ¿Cómo hago eso en xquery?
Para Saxon, puedes usar algo como esto:
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;"
};
Saludos,
http://rrusin.blogspot.com/2010/01/embedding-xquery-in-java.html
Si su procesador es compatible con XQuery 1.1, puede hacer lo siguiente:
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"
Solo usa una serie de expresiones if:
if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen") then "scullery"
else "just a room"
Usar un interruptor de tipo oculta lo que realmente estás 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.
XQuery no tiene una función para encender nada más que elementos.
Lo primero que debes hacer es convertir tu cadena en un elemento.
let $str := "kitchen"
let $room := element {$str} {}
Entonces solo usa el interruptor de tipo para hacer un cambio normal:
return typeswitch($room)
case element(bathroom) return "loo"
case element(kitchen) return "scullery"
default return "just a room"
Tenga en cuenta que esta puede ser una solución única de MarkLogic.