我尝试过各种变体来从我的输入中删除一个重复的节点。
我正在使用的当前表达式如下:
<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>
这必须简单,我知道我忽略了一些东西。谢谢!
答案 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>