Вы подходите к этой проблеме с чрезмерной точки зрения.
В XQuery вы можете установить значения переменных, но вы никогда не сможете их изменить.
Правильный способ выполнения алгоритмов итеративного типа - с помощью рекурсивной функции:
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)
}
но лучший способ решения проблемы - это описание проблемы не итерационным способом. В этом случае для всех различных значений в вашей последовательности вы хотите, чтобы значение, которое появляется максимальное количество раз для любого отдельного значения.
Предыдущая отправка, переведенная в XQuery:
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