Pergunta

Eu tenho uma variável externa entrando como uma corda e eu gostaria de fazer um switch / case sobre ele. Como posso fazer isso em xquery?

Foi útil?

Solução

A partir do XQuery 1.1, interruptor de uso:

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

Outras dicas

Basta usar uma série de se expressões:

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

Usando um typeswitch está escondendo o que você está realmente fazendo.

Qual destes métodos é mais eficiente dependerá do processador XQuery você está usando. Em um mundo ideal deve ser apenas uma questão de gosto, como deve ser para baixo para o otimizador para selecionar o método adequado, mas se o desempenho é importante que vale a pena o benchmarking ambas as versões. Eu ficaria muito surpreso se um processador otimizado a construção nó fora de seu exemplo, e não otimizar o meu exemplo para um interruptor especializada.

XQuery não tem uma função para ligar outra coisa senão elementos.

A primeira coisa que você faz é converter a cadeia a um elemento.

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

Em seguida, basta usar typeswitch para fazer um interruptor normal:

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

Por favor note, esta pode ser uma única solução MarkLogic.

Se o seu processador suporta XQuery 1.1, então você pode simplesmente fazer:

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

Para Saxon, você pode usar algo como isto:

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

Saudações,

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top