Vous abordez ce problème de manière trop impérative.
Dans XQuery, vous pouvez définir les valeurs des variables, mais vous ne pouvez jamais les modifier.
La bonne façon de faire des algorithmes de type itératif est une fonction récursive:
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)
}
mais une meilleure façon d'aborder le problème est en décrivant le problème d'une manière non itérative. Dans ce cas de toutes les valeurs distinctes dans votre séquence, vous voulez celui qui apparaît nombre maximum de fois de toute valeur distincte.
Le Sentance précédent traduit en XQuery est
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
Bonne question à nouveau (+1). Et la réponse est une expression XPath one-liner ... essayera de le rendre encore plus court. –