Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Начиная с 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, который Вы используете. В идеальном мире это должен только быть вопрос вкуса, как это должно быть до оптимизатора для выбора соответствующего метода, но если производительность важна, чтобы стоило сравнить обеих версий. Я был бы очень удивлен, оптимизировал ли процессор конструкцию узла из Вашего примера и не оптимизировал мой пример к специализированному переключателю.
Для саксонцев можно использовать нечто подобное:
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
Если ваш процессор поддерживает XQuery 1.1, вы можете просто сделать:
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"