XQuery - 如何删除空子元素

时间:2016-03-30 05:32:10

标签: xquery

我有以下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以获得此结果?提前谢谢!

1 个答案:

答案 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>