Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 用于确定所有节点唯一性的Xquery_Xpath_Xquery - Fatal编程技术网

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