假設一個文件,例如:XQuery項確定的所有節點都是唯一
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST1</b>
</a>
是否有任何的Xquery一個襯裏可用於檢查B的所有值是唯一的,而不必運行的for-each的在文檔上?因此,例如在上述文件中,將返回false,而下面的文檔中,將返回true
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST3</b>
</a>
假設一個文件,例如:XQuery項確定的所有節點都是唯一
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST1</b>
</a>
是否有任何的Xquery一個襯裏可用於檢查B的所有值是唯一的,而不必運行的for-each的在文檔上?因此,例如在上述文件中,將返回false,而下面的文檔中,將返回true
<a>
<b>TEST1</b>
<b>TEST2</b>
<b>TEST3</b>
</a>
你可以尋找具有相同值e兄弟姐妹,G:
count(b[preceding-sibling::b = .])
或獲得true或false:
not(b[preceding-sibling::b = .])
類似的方法,但使用empty()
可能會多一點效率:
empty(/a/b[. = following-sibling::b])
empty()
返回true
如果參數表達式產生空序列,則返回false
否則返回false
。因此,在這種情況下,如果找到具有相同值a.k.a的兄弟b
,則empty()
將返回false
。
最有效的可能是
count(b) = count(distinct-values(b))
你已經被賦予了其他的解決方案可能是在測試元件的數量二次,而這很可能是爲O(n log n)的。 (但是,這是假設重複是很少見的,如果重複是非常常見的,那麼某種摺疊操作可能會發現它們更快,尤其是使用XQuery 3.0)。
有一些選項..什麼版本的xquery是這個(1/2/3)? – har07