2017-01-18 12 views
1

Ano = 2001の中で最も多くの<Habitante>孫を持つ上位5 <Concelho>要素を返す必要がありますが、問題があります。ポジションのある要素を返す方法<

マイコード:

for $x in doc("Camaras.xml")/Portugal/Concelho 
order by xs:integer($x/Habitantes/Habitante[@Ano = "2001"]) descending 
return data($x[position() <= 5]) 

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Portugal SYSTEM "CamarasDTD.dtd"> <Portugal> 
    <Concelho Nome="Arganil " id="0"> 
     <Contactos> 
       <Email>[email protected]</Email> 
       <Telefone> +351 235 200 150</Telefone> 
       <Fax> +351 235 200 158</Fax> 
     </Contactos> 
     <Localização> 
       <Codigo-Postal>3304-954 Arganil</Codigo-Postal> 
     </Localização> 
     <Mapa src="http://cim-regiaodecoimbra.pt/wp-content/uploads/2014/04/3D_arganil.png" /> 
     <Habitantes> 
       <Habitante Ano="2001">2001</Habitante> 
       <Habitante Ano="2011">12145</Habitante> 
     </Habitantes> 
    </Concelho> 
    <Concelho Nome="Cantanhede " id="1"> 
     <Contactos> 
       <Email>[email protected]</Email> 
       <Telefone> +351 231 410 100</Telefone> 
       <Fax> +351 231 410 199</Fax> 
     </Contactos> 
     <Localização> 
       <Codigo-Postal>3060-133 Cantanhede</Codigo-Postal> 
     </Localização> 
     <Mapa src="http://cim-regiaodecoimbra.pt/wp-content/uploads/2014/04/3D_cantanhede1.png" /> 
     <Habitantes> 
       <Habitante Ano="2001">37910</Habitante> 
       <Habitante Ano="2011">36595</Habitante> 
     </Habitantes> 
    </Concelho> 
    <Concelho Nome="Coimbra " id="2"> 
     <Contactos> 
       <Email>[email protected]</Email> 
       <Telefone> +351 239 857 500</Telefone> 
       <Fax> +351 239 820 114</Fax> 
     </Contactos> 
     <Localização></Portugal> 

は順序が正常に機能しているが、それはすべての<Concelho>の要素を再調整です。

+2

あなただけ今私はたくさんありがとう理解Concelho' – eLRuLL

答えて

0

あなたはフィルタリング、その後、ソートを実行する必要があります。

let $foo := 
    for $x in doc("Camaras.xml")/Portugal/Concelho 
    order by xs:integer($x/Habitantes/Habitante[@Ano = "2001"]) descending 
    return $x 

return $foo[ position() <= 5 ] 
+0

1 'を示しています –

関連する問題