2

我是 XQuery 的新手。null请指导我解决下面的问题,如果下面的表达式没有给出任何值,我想将值作为字符串返回。

目前,输出不显示“名称”字段本身。我想有一个名字null。例如-

if (IsNull(expression),null,expression)

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

1 回答 1

2

您可以使用该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() 
于 2020-06-05T13:53:51.543 回答