Como você ligar uma string em XQuery?
-
01-07-2019 - |
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?
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