2017-04-25 9 views
1

重複している入力からノードを削除するためにさまざまなバリエーションを試しました。XQuery 1.0重複するノード値を削除する

次のように私が使用している現在の式は次のとおりです。それが、など

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

私も使用される$署名者/ IDを持っている、$署名者/名は、所望の出力を生成しません。

入力

 <Signers> 
      <id>a1546000000xtaqAAA</id> 
      <email>[email protected]</email> 
      <name>Jack Rogers</name> 
     </Signers> 
     <Signers> 
      <id>a1546000000xwNSAAY</id> 
      <email>[email protected]</email> 
      <name>Walter White</name> 
     </Signers> 
     <Signers> 
      <id>a1546000000xwNSAAY</id> 
      <email>[email protected]</email> 
      <name>Walter White</name> 
     </Signers> 

電流出力

<Signers> 
     <Signer>[email protected] Rogers</Signer> 
     <Signer>[email protected] White</Signer> 
    </Signers> 

所望の出力

  <Signers> 
      <id>a1546000000xtaqAAA</id> 
      <email>[email protected]</email> 
      <name>Jack Rogers</name> 
     </Signers> 
     <Signers> 
      <id>a1546000000xwNSAAY</id> 
      <email>[email protected]</email> 
      <name>Walter White</name> 
     </Signers> 

これは単純である必要があり、私は私が何かを見下ろすています知っています。ありがとうございました!

答えて

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> 
関連する問題