2017-04-25 4 views
1

Ich habe alle möglichen Variationen versucht, um einen Knoten aus meiner Eingabe zu entfernen, der ein Duplikat ist.XQuery 1.0 Doppelte Knotenwerte entfernen

Der aktuelle Ausdruck verwende ich ist wie folgt:

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

ich sogar $ signer/id, $ signer/name verwendet haben, etc., aber dass die gewünschte Ausgabe nicht erzeugen.

Eingang

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

Stromausgang

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

gewünschte Ausgabe

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

Das hat einfach zu sein, und ich weiß, ich bin etwas übersehen. Vielen Dank!

Antwort

1

Sie tun können, als durch verschiedene id auszuwählen folgt:

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

demo

Oder mit distinct-values() wie Sie zu tun versucht:

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