Xquery查找重复ID

时间:2010-10-06 18:08:53

标签: xml duplicates xquery xpath-2.0

我有一个XML数据库,其中包含具有id的元素。这些都是独一无二的。它们还有一个辅助标识符,用于将它们链接到另一个数据库中的类似对象。这些都不是唯一的。

是否有一个XQuery可以让我识别所有非唯一ID?我可以计算有多少使用distinct-values(),但这无助于识别具有重复项的ID!

示例XML :(每个对象都包含在eXist数据库的单独文件中)

<object id="uniqueID123">
  <secondary identifier="nonUnique888"/>
</object>

<object id="uniqueID456">
  <secondary identifier="nonUnique888"/>
</object>

<object id="uniqueID789">
  <secondary identifier="Unique999"/>
</object>

我想识别重复的字符串“nonUnique888”。

3 个答案:

答案 0 :(得分:3)

以下查询返回所有非唯一标识符:

let $sec := doc('source')/root/object/secondary
for $id in distinct-values($sec/@identifier)
where count($sec[@identifier eq $id]) gt 1
return $id

答案 1 :(得分:2)

使用

let $vSeq := /object/secondary/@identifier
  return
    $vSeq[index-of($vSeq,.)[2]] 

阅读解释here

答案 2 :(得分:0)

在xml文件中使用此代码存储

let $path:="/db/test/all.xml"
let $a := xmldb:store( $col,'adub.xml',<root></root>)  

let $sec := doc($path)//profile
for $id in distinct-values($sec/mail)
where count($sec[mail eq $id]) gt 1
return 
 update insert  
            <profile>
                {$id}
                </profile>
   into  doc($a)/root