xquery, чтобы проверить, является ли значение null, затем вернуть null как строку

Я новичок в XQuery. Пожалуйста, помогите мне решить проблему, указанную ниже. Я хочу вернутьnull значение в виде строки, если приведенное ниже выражение не дает никакого значения.

В настоящее время в выходных данных не отображается само поле "имя". Я хочу иметь имя сnull. например,

if (IsNull(expression),null,expression)

$output.dataAccessResponse[1]/*:row/*:name/text()

1 ответ

Вы можете использовать fn:exists() функция, чтобы проверить, есть ли text() узел.

exists($output.dataAccessResponse[1]/:row/:name/text())

Вы также можете использовать fn:boolean() функция для проверки эффективного логического значения узла.

boolean($output.dataAccessResponse[1]/:row/:name/text())

Если вы хотите проверить, было ли значимое значение, то есть что-то иное, кроме пробелов, вы можете fn:normalize-space() в предикате, чтобы гарантировать, что только text() узлы с осмысленным текстом выбираются, а затем проверяются fn:exists().

exists($output.dataAccessResponse[1]/:row/:name/text()[normalize-space()])

XQuery не имеет null, поэтому, если вы спрашиваете, что вернуть, чтобы указать null, тогда вы захотите вернуть пустую последовательность () вместо того null.

Итак, вы можете выполнить что-то вроде этого:

let $name := $output.dataAccessResponse[1]/:row/:name/text()
return 
  if (fn:exists($name)) 
  then $name 
  else ()

Но в этот момент это действительно то же самое, что просто попытаться выбрать text() с этим XPath, и он либо вернет text() узел или пустая последовательность:

$output.dataAccessResponse[1]/:row/:name/text() 
Другие вопросы по тегам