假设文件如:
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST1</b>
</a>
是否有任何Xquery一个衬垫可用于检查b的所有值是否唯一,而无需在doc上运行for-each?因此,例如在上面的文档中它将返回false,而在下面的文档中它将返回true
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST3</b>
</a>
答案 0 :(得分:1)
类似的方法,但使用empty()
可能会更有效:
empty(/a/b[. = following-sibling::b])
如果参数表达式产生空序列,则 empty()
返回true
,否则返回false
。因此,在这种情况下,如果找到具有相同值的同级b
a.k.a a dupe,则empty()
将返回false
。
答案 1 :(得分:0)
您可以查找具有相同值e,g:
的兄弟姐妹 count(b[preceding-sibling::b = .])
或得到真或假:
not(b[preceding-sibling::b = .])
答案 2 :(得分:0)
效率最高的可能是
count(b) = count(distinct-values(b))
您给出的其他解决方案可能是测试元素数量的二次方,而这可能是O(n log n)。
(但是,这是假设重复是罕见的。如果重复是非常常见的,那么某种折叠操作可能会发现它们更快,特别是使用XQuery 3.0)。