Besoin aide - Fichier XSL en XML
Résolu
Cadavre
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Cadavre Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Cadavre Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Besoin aide - Fichier XSL en XML
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
4 réponses
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
à +
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
à +
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
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
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
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
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!
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!
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
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