Xpath 用于确定所有节点唯一性的Xquery
假设文件如下:Xpath 用于确定所有节点唯一性的Xquery,xpath,xquery,Xpath,Xquery,假设文件如下: <a> <b>TEST1</b> <b>TEST2</b> <b>TEST1</b> </a> 测试1 测试2 测试1 是否有任何Xquery一行程序可用于检查b的所有值是否唯一,而无需为文档上的每个值运行a?例如,在上面的文档中,它将返回false,而在下面的文档中,它将返回true <a> <b>TEST1</b> <b&g
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST1</b>
</a>
测试1
测试2
测试1
是否有任何Xquery一行程序可用于检查b的所有值是否唯一,而无需为文档上的每个值运行a?例如,在上面的文档中,它将返回false,而在下面的文档中,它将返回true
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST3</b>
</a>
测试1
测试2
测试3
您可以查找具有相同值的兄弟姐妹,例如:
count(b[preceding-sibling::b = .])
或者说是真是假:
not(b[preceding-sibling::b = .])
类似的方法,但使用可能更有效:
empty(/a/b[. = following-sibling::b])
empty()
如果参数表达式生成空序列,则返回true
,否则返回false
。因此,在这种情况下,如果发现具有相同值a.k.a dupe的兄弟b
,empty()
将返回false最有效的可能是
count(b) = count(distinct-values(b))
您得到的其他解决方案在测试元素的数量上可能是二次的,而这可能是O(n logn)
(但是,这是基于重复项很少的假设。如果重复项非常常见,则某种折叠操作可能会更快地找到它们,尤其是在XQuery 3.0中)。有一些选项。。这是什么版本的xquery(1/2/3)?