如何在XQuery中指出“缺失”标签?

时间:2010-03-28 17:36:19

标签: xquery

我有一个XML文件:

$xml := <xml>
          <element>
              <text>blahblah</text>
          </element>
          <element>
          </element>
          <element>
              <text>blahblah</text>
          </element>
      </xml>

我可以使用查询

for $x in $xml/xml/element/text return string($x)

这给了我一个清单

blahblah
blahblah

没有迹象表明存在没有元素的元素。我想做的是使用一个查询,如果没有这样的元素,返回,说“缺少”。我该怎么做?

5 个答案:

答案 0 :(得分:1)

对于一系列字符串(第一个答案的略微修改版本):

for $e in $xml/xml/element
return
  if ($e/text)
  then string($e/text)
  else "missing"

或使用let(对我来说似乎有点干净......但它可能只有6个,另外6个):

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

希望有所帮助。

答案 1 :(得分:1)

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

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

/xml/element[not(*)]

答案 2 :(得分:0)

这应该有效:

for $x in $xml/xml/element
return
  if (text)
  then string(text)
  else "missing"

答案 3 :(得分:0)

MarkLogic中的


for $e in $xml/xml/element
   return ($e/text,"missing")

答案 4 :(得分:0)

$ XML /元件/串((文本, “丢失”)[1])

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

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

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

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

http://demo.exist-db.org/exist/sandbox/sandbox.xql