Как Вы включаете строку в XQuery?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
12
задан Sixty4Bit 17 September 2008 в 17:45
поделиться

5 ответов

Начиная с 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?" 
23
ответ дан 2 December 2019 в 04:34
поделиться

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 только решение.

3
ответ дан 2 December 2019 в 04:34
поделиться

Просто используйте серию если выражения:

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

Используя typeswitch скрывает то, что Вы действительно делаете.

То, которое из этих методов является самым эффективным, будет зависеть от процессора XQuery, который Вы используете. В идеальном мире это должен только быть вопрос вкуса, как это должно быть до оптимизатора для выбора соответствующего метода, но если производительность важна, чтобы стоило сравнить обеих версий. Я был бы очень удивлен, оптимизировал ли процессор конструкцию узла из Вашего примера и не оптимизировал мой пример к специализированному переключателю.

3
ответ дан 2 December 2019 в 04:34
поделиться

Для саксонцев можно использовать нечто подобное:

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

Regards,

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

1
ответ дан 2 December 2019 в 04:34
поделиться

Если ваш процессор поддерживает XQuery 1.1, вы можете просто сделать:

switch ($room) 
  case "bathroom" return "loo"
  case "kitchen" return "scullery"
  default return "just a room"
3
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: