Pregunta

Tengo una variable externa que ingresa como una cadena y me gustaría cambiarla o cambiarla.¿Cómo hago eso en xquery?

¿Fue útil?

Solución

A partir de XQuery 1.1, utilice el modificador:

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

Otros consejos

Simplemente use 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 tipográfico 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, debería ser sólo una cuestión de gustos, ya que debería ser responsabilidad del optimizador seleccionar el método apropiado, pero si el rendimiento es importante, vale la pena comparar ambas versiones.Me sorprendería mucho si un procesador optimizara la construcción del nodo a partir de su ejemplo y no optimizara mi ejemplo para un conmutador especializado.

XQuery no tiene una función para activar nada más que elementos.

Lo primero que debes hacer es convertir tu cadena en un elemento.

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

Luego simplemente use 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 exclusiva de MarkLogic.

Si su procesador es compatible con XQuery 1.1, simplemente puede hacer:

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top