2016-04-15 6 views
1

のような文書を想定すると、ユニークであります医者に?そこで、以下の文書で、それは真のXQueryは

<a> 
<b>TEST1</b> 
<b>TEST2</b> 
<b>TEST3</b> 
</a> 
+0

いくつかのオプションがあります。これはxqueryのどのバージョンですか(1/2/3)? – har07

答えて

0

を返すのに対し、上記の文書で、たとえばそれは、falseを返しますあなたは同じ値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を返します。この場合、同じ値a.k.aを持つ兄弟bが見つかった場合、empty()falseを返します。

0

最も効率的には、おそらく

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

これはO(n個のnを記録)である可能性が高いのに対し、あなたが与えられている他のソリューションは、テスト要素の数に二次である可能性が高いです。

(ただし、重複はまれですが、重複が非常に一般的な場合は、特にXQuery 3.0を使用した場合には、何らかの折り畳み操作が高速になる可能性があります)。