Bonjour, je cherche à calculer une moyenne sur base d’attributs :
A partir d’un fichier XML :
Je cherche à obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet href="class.xsl" type="text/xsl" ?> <université> <étudiant><nom>Réjean Tremblay</nom> <cours sigle="INF8430" note="89" /> <cours sigle="INF1030" note="69" /> <cours sigle="INF1230" note="75" /></étudiant> <étudiant><nom>Martin Lambert</nom> <cours sigle="INF8430" note="75" /> <cours sigle="INF1030" note="72" /> <cours sigle="INF1230" note="73" /></étudiant> <étudiant><nom>Luc Alain</nom> <cours sigle="INF9430" note="39" /> <cours sigle="INF1030" note="89" /> <cours sigle="INF1230" note="79" /></étudiant> <étudiant><nom>Olive Saint-Amant</nom> <cours sigle="INF8430" note="91" /> <cours sigle="INF1230" note="99" /></étudiant> </université>
J’ai notamment essayé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <maliste> <cours sigle="INF8430">85</cours> <cours sigle="INF1030">76.66666666666667</cours> <cours sigle="INF1230">81.5</cours> <cours sigle="INF9430">39</cours> </maliste>
Et ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <maliste> {for $s in distinct-values(doc("Ex2.xml")//@sigle) return <cours sigle="$s"> {avg(for $n in {cours[current()/@sigle=@sigle]/@note} return $n) } </cours> } </maliste>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <maliste> {for $s in distinct-values(doc("Ex2.xml")//@sigle) return <cours sigle="$s"> {avg(for $n in ./@note return $n) } </cours> } </maliste>
Bref, après plusieurs tentatives de codes différents, il me semblait que celui-ci était le plus (simple) logique :
Mais, à mon grand désespoir , il ne me retourne que ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <maliste> {for $c in doc("Ex2.xml")/universite/etudiant/cours return <cours sigle="{($c/@sigle)[1]}"> {avg(for $n in $c/@note return $n) } </cours> } </maliste>
Quelque chose doit m’échapper, pouvez-vous m’éclairer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="UTF-8"? <maliste> <cours sigle="INF8430">89</cours> <cours sigle="INF1030">69</cours> <cours sigle="INF1230">75</cours> <cours sigle="INF8430">75</cours> <cours sigle="INF1030">72</cours> <cours sigle="INF1230">73</cours> <cours sigle="INF9430">39</cours> <cours sigle="INF1030">89</cours> <cours sigle="INF1230">79</cours> <cours sigle="INF8430">91</cours> <cours sigle="INF1230">99</cours> </maliste>
Un grand merci d'avance !
Radu
Partager