Besoin aide - Fichier XSL en XML

Résolu/Fermé
Cadavre Messages postés 13 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2008 - 4 févr. 2008 à 05:10
Cadavre Messages postés 13 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2008 - 30 avril 2008 à 23:02
Bonjour,
pour commencer voici le fichier XML que je veux traiter:

<?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é>

Et voici ce que je veux obtenir:

Sigle Nombre d’´etudiants Moyenne du cours
INF8430 3 85.0
INF1030 3 76.7
INF1230 4 81.5
INF9430 1 39.0

Maintenant, mon problème est que je n'arrive pas à trier mon fichier XML selon les cours qu'il contient. J'ai essayé avec "<xsl:for-each match="//cours">...". Mais j'obtiens toujours un écran blanc ou encore un tableau où se répète mes cours par étudiant. Ce que je ne veux absolument pas! Je ne sais pas si je fais du sens ici! ;-) Alors toute aide sera vraiment appréciée sur comment afficher une liste des différents cours que l'on retrouve dans le fichier XML. J'ai passé beaucoup trop de temps sur ce problème.

Cadavre
A voir également:

4 réponses

Utilisateur anonyme
4 févr. 2008 à 05:20
salut
j'ai eu le meme proble que toi. j'ai trouvé la soluce grace à ce cours.--->http://www.developpez.biz/downloads/xml/cours-xml-xls.pdf
à +


0
Cadavre Messages postés 13 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2008 2
4 févr. 2008 à 07:19
Salut
pour commencer merci pour l'information mais ca m'a pas aidé. :-( Voici mon fichier XSL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="université">
<html>
<head>
</head>
<body>
<table border="1">
<tr >
<td>Sigle</td>
<td>Nombre d'étudiants</td>
<td>Moyenne du cours</td>
</tr>
<xsl:for-each select="./étudiant[not(preceding::cours/@sigle=./cours/@sigle)]">
<tr>
<td>
<xsl:value-of select="@sigle"/>
</td>
<td>
<xsl:value-of select="count(cours[not(preceding::cours=.)])" />
</td>
<td>
<xsl:value-of select="format-number(sum(.//cours/@note) div (count(.//cours)), '##.0')" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Ce qui me donne présentement pas grand chose. Je crois être proche de la solution mais je ne la vois toujours pas. Car je n'arrive pas à comprendre comment je peux déterminer si un cours se trouve plus d'une fois sous un étudiant et s'il se trouve sous plus d'un étudiant.

Encore une fois merci d'avance pour toute aide!
Cadavre
0
Utilisateur anonyme
4 févr. 2008 à 20:04
re
oui c'est un petit casse tete.

voici un autre lien avec plus d'exemples.

http://be2.php.net/manual/fr/function.xsl-xsltprocessor-transform-to-xml.php

à plus
0
Cadavre Messages postés 13 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2008 2
10 févr. 2008 à 20:20
Salut,
pour commencer désolé de ne pas avoir répondu très rapidement ma semaine a été remplie d'overtime... En passant merci pour le lien. Mais le lien que tu m'a envoyé va m'être utile seulement pour la prochaine question de mes exercices. Mais pour l'instant je ne vois toujours pas le comment répondre à cet exercice! :-( J'ai bien beau essayer différentes combinaisons, avec des for-each, des tests de conditions, etc. Je n'avance pas plus! Et je ne demande non plus que quelqu'un me donne la réponse tout cuit dans le bec! Mais au moins quelques informations, exemples ou encore liens me permettant de comprendre.

Merci encore une fois pour toute aide!
0
Cadavre Messages postés 13 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2008 2
30 avril 2008 à 23:02
Bonjour,
pour ceux que ça intéresse voici le comment:
...
<xsl:for-each select="//cours[generate-id(.)=generate-id(key('numsigle', @sigle)[1])]">
<!--<xsl:sort select="@sigle"/>-->
<tr>
<td>
<xsl:value-of select="@sigle" />
</td>
<td>
<xsl:value-of select="count(key('numsigle', @sigle))" />
</td>
<td>
<xsl:value-of select="format-number(sum(//cours[@sigle=current()/@sigle]/@note) div count(key('numsigle', @sigle)), '##.0')" />
</td>
</tr>
</xsl:for-each>
...

Cadavre
0