Podchodzisz do tego problemu z nadmiernego imperatywnego punktu widzenia.
W XQuery można ustawić wartości zmiennych, ale nigdy nie można ich zmienić.
Prawidłowy sposób zrobić algorytm iteracyjny typu jest z funkcji rekurencyjnej:
declare funciton local:most($sequence, $index, $value, $count)
{
let $current=$sequence[$index]
return
if (empty($current))
then $value
else
let $current-count = count(index-of($current, $sequence))
return
if ($current-count > $count)
then local:most($sequence, $index+1, $current, $current-count)
else local:most($sequence, $index+1, $value, $count)
}
ale lepszym sposobem podejścia do problemu jest poprzez opisanie problemu w nie-iteracyjny sposób. W tym przypadku wszystkich odrębnych wartości w sekwencji chcesz ten, który pojawia się maksymalną liczbę razy jakiejkolwiek odrębnej wartości.
Poprzedniego sentance języku XQuery jest
let $max-count := max(for $value1 in distinct-values($sequence)
return count(index-of($sequence, $value1)))
for $value2 in distinct-values($sequence)
where (count(index-of($sequence, $value2)) = $max-count
return $value2
Dobre pytanie ponownie (+1). Odpowiedzią jest wyrażenie jedno-liniowe XPath ... postaram się, aby było jeszcze krótsze. –