Vra

Ek het 'n eksterne veranderlike kom in as 'n string en ek wil graag 'n switch / case doen op dit. Hoe kan ek dit doen in XQuery?

Was dit nuttig?

Oplossing

Begin met XQuery 1.1, gebruik skakelaar:

http://www.w3.org/TR/xquery-11 / # ID-skakelaar

switch ($animal) 
   case "Cow" return "Moo"
   case "Cat" return "Meow"
   case "Duck" return "Quack"
   default return "What's that odd noise?" 

Ander wenke

Net gebruik 'n reeks van as uitdrukkings:

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

Die gebruik van 'n typeswitch wegkruip wat jy regtig doen.

Watter van hierdie metodes is mees doeltreffende sal afhang van die XQuery verwerker wat jy gebruik. In 'n ideale wêreld sou dit net 'n kwessie van smaak, as dit af moet wees om die optimizer om die toepaslike metode kies, maar as prestasie is belangrik dit is die moeite werd benchmarking beide weergawes. Ek sou baie verbaas wees as 'n verwerker new die node konstruksie uit jou voorbeeld, en het my voorbeeld nie te optimaliseer om 'n gespesialiseerde skakelaar wees.

XQuery nie 'n funksie het vir die skakel op enigiets anders as elemente.

Die eerste ding wat jy doen, is sit jou string na 'n element.

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

Gebruik dan net typeswitch om 'n normale skakelaar doen:

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

Let wel, dit kan 'n net MarkLogic oplossing wees.

As jou verwerker XQuery 1.1 ondersteun, dan kan jy net doen:

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

Vir Saksiese, kan jy iets soos hierdie gebruik:

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

Groete,

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

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top