我有一个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
没有迹象表明存在没有元素的元素。我想做的是使用一个查询,如果没有这样的元素,返回,说“缺少”。我该怎么做?
答案 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)
for $e in $xml/xml/element return ($e/text,"missing")
答案 4 :(得分:0)
$ XML /元件/串((文本, “丢失”)[1])
函数,因此这里不需要显式循环。
表达式(文字,“缺失”)[1]
返回text元素序列中的第一个非null项,后跟字符串“missing”