2016-04-15 26 views
1

假設一個文件,例如: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> 
+0

有一些選項..什麼版本的xquery是這個(1/2/3)? – har07

回答

0

你可以尋找具有相同值e兄弟姐妹,G:

count(b[preceding-sibling::b = .]) 

或獲得true或false:

not(b[preceding-sibling::b = .]) 
1

類似的方法,但使用empty()可能會多一點效率:

empty(/a/b[. = following-sibling::b]) 

empty()返回true如果參數表達式產生空序列,則返回false否則返回false。因此,在這種情況下,如果找到具有相同值a.k.a的兄弟b,則empty()將返回false

0

最有效的可能是

count(b) = count(distinct-values(b)) 

你已經被賦予了其他的解決方案可能是在測試元件的數量二次,而這很可能是爲O(n log n)的。 (但是,這是假設重複是很少見的,如果重複是非常常見的,那麼某種摺疊操作可能會發現它們更快,尤其是使用XQuery 3.0)。

相關問題