我有以下XQuery:
<a> {
for $p in doc("p.xml")//p
return
<p q="{$p/@q}> {
for $w in $p//@w
where count(doc("r.xml")//s[@w = $w]) = 0
return
<s w="{$w}"></s>
} </p>
} </a>
当我运行galax-run时,它会给出以下结果(格式化之后):
<a>
<p q="p1">
<s w="S"/>
<s w="Sc"/>
<s w="L"/>
</p>
<p q="p2"/>
<p q="p3">
<s w="S"/>
</p>
</a>
我想在结果中删除<p q="p2"/>
,因为元素中没有任何内容。所以我想要的结果是:
<a>
<p q="p1">
<s w="S"/>
<s w="Sc"/>
<s w="L"/>
</p>
<p q="p3">
<s w="S"/>
</p>
</a>
如何修改XQuery以获得此结果?提前谢谢!
答案 0 :(得分:2)
在没有示例输入XML的情况下不清楚,但我认为,您可以使用if-then-else
构造来跳过<p>
为空的$content
元素。像这样(未经测试):
<a> {
for $p in doc("p.xml")//p
let $content :=
for $w in $p//@w
where count(doc("r.xml")//s[@w = $w]) = 0
return $w
return
if($content) then
<p q="{$p/@q}"> {
for $c in $content
return
<s w="{$c}"></s>
} </p>
else ()
} </a>