如何表示';缺失';XQuery中的标记?

如何表示';缺失';XQuery中的标记?,xquery,Xquery,我有一个XML文件: $xml := <xml> <element> <text>blahblah</text> </element> <element> </element> <element> <text>blahblah</

我有一个XML文件:

$xml := <xml>
          <element>
              <text>blahblah</text>
          </element>
          <element>
          </element>
          <element>
              <text>blahblah</text>
          </element>
      </xml>
这给了我一个清单

blahblah
blahblah
没有迹象表明有一个元素没有元素。我想做的是使用一个查询,如果没有这样的元素,它将返回“missing”。我该怎么做?

这应该可以:

for $x in $xml/xml/element
return
  if (text)
  then string(text)
  else "missing"
对于字符串序列(第一个答案的稍微修改版本):

或者使用let(对我来说似乎有点干净……但可能只是一打半中的六个):


希望这会有所帮助。

是否尝试返回没有子元素的“element”元素?(在您的示例中,这是第二次出现“element”,因为第一个和最后一个包含“text”元素。)

如果是,可以在XPath表达式中使用谓词:

/xml/element[not(*)]
在MarkLogic中

for $e in $xml/xml/element return ($e/text,"missing") 对于$xml/xml/element中的$e 返回($e/文本,“缺失”) $xml/element/string((文本,“缺少”)[1])

  • XPath表达式中允许使用函数,因此这里不需要显式循环

  • 表达式(文本,“缺失”)[1]

返回文本元素序列中的第一个非空项,后跟字符串“missing”

  • 您可以使用eXist沙盒执行代码段:-

for $e in $xml/xml/element
let $text := string($e/text)
return
  if ($text)
  then $text
  else "missing"
/xml/element[not(*)]
for $e in $xml/xml/element return ($e/text,"missing")