Как подсчитать количество элементов clild с одним родителем в xquery

#xml #xquery

Вопрос:

Я новичок в xquery и пытаюсь подсчитать количество альбомов, которые есть у каждого музыканта.

Мои данные следующие:

 lt;musiciansgt;  lt;musician type="band"gt;  lt;namegt;If These Trees Could Talklt;/namegt;  lt;genregt;Post-Rocklt;/genregt;  lt;albumsgt;  lt;album year="2006"gt;If These Trees Could Talklt;/albumgt;  lt;album year="2009"gt;Above the Earth, Below the Skylt;/albumgt;  lt;/albumsgt;  lt;/musiciangt;  lt;musician type="solo"gt;  lt;namegt;Justin Berghlt;/namegt;  lt;genregt;Pop-Rocklt;/genregt;  lt;albumsgt;  lt;album year="2005"gt;Out of My Handslt;/albumgt;  lt;album year="2010"gt;Lateraluslt;/albumgt;  lt;/albumsgt;  lt;/musiciangt;  lt;musician type="band"gt;  lt;namegt;Toollt;/namegt;  lt;genregt;Progressive Metallt;/genregt;  lt;albumsgt;  lt;album year="1993"gt;Undertowlt;/albumgt;  lt;album year="1996"gt;Aenimalt;/albumgt;  lt;album year="2001"gt;Lateraluslt;/albumgt;  lt;album year="2006"gt;10,000 Dayslt;/albumgt;  lt;/albumsgt;  lt;/musiciangt; lt;/musiciansgt;  

Ожидаемый результат:

 2 2 4  

Мой код в настоящее время:

 for $n in //musicians/musician/albums let $count := count($n) return $count  

Мой вывод таков

 1 1 1  

Ответ №1:

В настоящее время вы подсчитываете количество albums элементов, в то время как ваша заявленная цель-подсчитать album элементы.

Измените свой код следующим образом:

 for $n in //musicians/musician/albums let $count := count($n/album) return $count  

Это дает необходимый результат:

 2 2 4