@ pepe123656, вы не указали, какую версию XQuery вы используете. Вот решение XQuery 3.0 и новее, в котором используется условие group by
. Предикат
encompassed[...]
используется, поскольку некоторые страны, такие как Россия, Турция и т. П., Находятся на двух континентах.
XQuery
<root>{
for $country in doc('e:\temp\mon.xml')/mondial/country
let $population := $country/@population
(: Turkey, Russia, etc. are on two continents :)
(: We select the highest land percentage continent :)
group by $continentID := $country/encompassed[xs:double(@percentage) eq max($country/encompassed/@percentage)]/@continent
order by $continentID
return <row>
{
$country/../continent[@id = $continentID]/@name || ": " || $country[@population = max($population)]/@name || ": " || xs:integer(max($population))
}
</row>
}</root>
Выход
<root>
<row>Europe: Germany: 83536112</row>
<row>Asia: China: 1210004992</row>
<row>America: United States: 266476272</row>
<row>Australia/Oceania: Australia: 18260864</row>
<row>Africa: Nigeria: 103912488</row>
</root>