Способ подсчета без карт будет состоять в том, чтобы собрать отдельный список Student-name
, а затем использовать эти имена, чтобы получить счетчик Student-name
элементов с этими именами:
for $student in fn:distinct-values($Classes/Class/Student-name)
return
$student||":"||count($Classes/Class[Student-name=$student])
Aспособ добиться того же с картами - это пройтись по каждому из элементов Student-name
, поместив на карту запись, увеличивающую текущий счет на 1:
let $stats := map:new()
let $_ :=
for $student in $Classes/Class/Student-name
return map:put($stats, $student, 1 + (map:get($stats, $student), 0)[1])
return
map:keys($stats) ! ( .||":"||map:get($stats, .) )