У меня есть внешняя переменная, входящая в строку, и я хотел бы сделать на ней переключатель/регистр. Как это сделать в xquery?Как включить строку в XQuery?
ответ
Начиная с XQuery 1.1, используйте переключатель:
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?"
XQuery не имеет функции включения каких-либо элементов, кроме элементов.
Первое, что вы делаете, это преобразовать вашу строку в элемент.
let $str := "kitchen"
let $room := element {$str} {}
Тогда просто использовать typeswitch, чтобы сделать нормальный переключатель:
return typeswitch($room)
case element(bathroom) return "loo"
case element(kitchen) return "scullery"
default return "just a room"
Пожалуйста, обратите внимание, что это может быть только MarkLogic решение.
Просто используйте серию, если выражения:
if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen") then "scullery"
else "just a room"
Используя typeswitch скрывается то, что вы действительно делаете.
Какой из этих методов наиболее эффективен, зависит от используемого вами процессора XQuery. В идеальном мире это должно быть только вопросом вкуса, так как это должно быть до оптимизатора, чтобы выбрать подходящий метод, но если производительность важна, стоит сопоставить обе версии. Я был бы очень удивлен, если бы процессор оптимизировал конструкцию узла из вашего примера и не оптимизировал мой пример для специализированного коммутатора.
Для Saxon, вы можете использовать что-то вроде этого:
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;"
};
С уважением,
http://rrusin.blogspot.com/2010/01/embedding-xquery-in-java.html
Если ваш процессор поддерживает XQuery 1.1, то вы можете просто сделать:
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"
Это решение будет (должен) работать в любом XQUERY процессоре, но не так ясно, как простая вложенным, если решение. – 2009-05-06 17:20:24
Я просто ненавижу вложенные, если. Мне нравится пример XQuery 1.1, поэтому я отметил его как ответ. – Sixty4Bit 2010-05-06 20:45:46