XQuery 1.0删除重复的节点值

时间:2017-04-25 01:59:07

标签: xquery

我尝试过各种变体来从我的输入中删除一个重复的节点。

我正在使用的当前表达式如下:

    <Signers>{
            let $signers := fn:distinct-values($temp.load/*/Signers)
            for $signer in $signers
  return
    <Signer>{
        $signer
    }</Signer>
}</Signers>

我甚至使用了$ signer / id,$ signer / name等,但这并没有产生所需的输出。

输入

        <Signers>
           <id>a1546000000xtaqAAA</id>
           <email>jrogers@burlington.com</email>
           <name>Jack Rogers</name>
        </Signers>
        <Signers>
           <id>a1546000000xwNSAAY</id>
           <email>myaddress96@gmail.com</email>
           <name>Walter White</name>
        </Signers>
        <Signers>
           <id>a1546000000xwNSAAY</id>
           <email>myaddress@gmail.com</email>
           <name>Walter White</name>
        </Signers>

当前输出

    <Signers>
       <Signer>a1546000000xtaqAAAjrogers@burlington.comJack Rogers</Signer>
       <Signer>a1546000000xwNSAAYrichbateman96@gmail.comWalter White</Signer>
    </Signers>

期望输出

         <Signers>
           <id>a1546000000xtaqAAA</id>
           <email>jrogers@burlington.com</email>
           <name>Jack Rogers</name>
        </Signers>
        <Signers>
           <id>a1546000000xwNSAAY</id>
           <email>myaddress96@gmail.com</email>
           <name>Walter White</name>
        </Signers>

这必须简单,我知道我忽略了一些东西。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以按照以下步骤选择不同的id

<Signers>
{
    /*/Signers[not(id=preceding-sibling::Signers/id)]
}
</Signers>

<强> demo

或者按照您的尝试使用distinct-values()

<Signers>
{
    let $ids := fn:distinct-values(/*/Signers/id)
    for $id in $ids
    return
        /*/Signers[id=$id][1]
}
</Signers>