XSLT - XML/XSL - Programmation
Marsh Posté le 18-06-2012 à 03:13:12
En modifiant le moins possible ton code:
Code :
|
Testé avec Saxon, et ça donne la sortie que tu désires.
J'ai écrit ça vite fait, il y a peut être plus élégant.
A+,
Marsh Posté le 18-06-2012 à 11:31:19
Bon, maintenant que je suis réveillé, quelques commentaires:
<xsl:key name="ISBN" match="livre" use="@isbn"/>
ça crée une sorte d'associative array, avec pour clé, la valeur de l'expression use dans le contexte du match, et comme valeur, une node list qui contiendra le match (et d'autres si on en rencontre plus tard avec la même valeur de clé).
<xsl:template name="livre">
<xsl:param name="PRIX"/>
<xsl:param name="LIVRE"/>
...
</xsl:template>
c'est comme une déclaration de fonction livre(PRIX, LIVRE) ou PRIX et LIVRE sont les deux parametres.
Dans le corps de la fonction, les paramètres sont représentés précédés d'un $: $LIVRE, $PRIX
<xsl:call-template name="livre">
<xsl:with-param name="PRIX" select="@prix"/>
<xsl:with-param name="LIVRE" select="key('ISBN', text())"/>
</xsl:call-template>
c'est comme l'appel de la fonction livre(@prix, key('ISBN', text()), ou la valeur des paramètres passés à l'appel est évaluée dans le contexte de l'appel.
Au vu de ton fichier xml, il était clair qu'on pouvait indexer les livres par leur valeur d'isbn, d'ou la déclaration de l'element xsl:key.
<xsl:for-each select="//editeur">
...
<xsl:for-each select="isbn">
...
</xsl:for-each>
</xsl:for-each>
permet de traiter les livres pour chaque éditeur.
On est obligé de passer par un template nommé, car il faut des infos venant de deux contextes différents, celui des livres, et celui de l'éditeur, pour le prix.
Si on n'avait pas besoin du prix, un template normal de traitement des livres aurait suffi, <xsl:template match="livre">... avec un appel <xsl:apply-template select="key('ISBN', text())"/> à la place du template nommé.
A+,
Marsh Posté le 18-06-2012 à 11:59:19
Y'aurait peut-être à revoir la structure du xml pour avoir toutes les infos nécessaires sous la balise <livre> pour que ça soit plus simple à traiter
Marsh Posté le 18-06-2012 à 12:10:15
Bonjour ,
Merci guilou pour ta réponse si rapide et si explicite .
Marsh Posté le 18-06-2012 à 12:13:47
rufo a écrit : Y'aurait peut-être à revoir la structure du xml pour avoir toutes les infos nécessaires sous la balise <livre> pour que ça soit plus simple à traiter |
Parfois on n'a pas la maîtrise de ce genre de choses. Et c'est justement pour cela qu'il y a le xslt.
A+,
Marsh Posté le 18-06-2012 à 12:48:55
tout à fait, mais il n'a pas indiqué qu'il n'avait pas la maîtrise du xml...
Marsh Posté le 18-06-2012 à 01:28:19
Bonsoir tout le monde,
Donc voila je coince depuis un moment pour transformer mon fichier xml en html.
Le problème c'est j'arrive pas à mettre les titres et prix des livres pour chaque éditeurs,
voici mon code xml :
et voila le résultat en html :
0'Reilly ( 3 Livres)
1.Comprendre XSLT (2002) 18 euros, nombre d'auteurs : 2
2.Pratique de MYSQL et PHP (2003) 18 euros, nombre d'auteurs : 1
3.Savoir Programmer (1988) 18 euros, nombre d'auteurs : 3
4.Base de donnée Mysql/Oracle (1994) 18 euros, nombre d'auteurs : 2
5.Architecture des Ordinateurs (2004) 18 euros, nombre d'auteurs : 1
6.Logique et Programmation Logique (2009) 18 euros, nombre d'auteurs : 4
7.Developpement Web (2000) 18 euros, nombre d'auteurs : 2
8.Réseau et Déploiment (2012) 18 euros, nombre d'auteurs : 1
Dunod ( 5 Livres)
1. Comprendre XSLT (2002) 18 euros, nombre d'auteurs : 2
2.Pratique de MYSQL et PHP (2003) 18 euros, nombre d'auteurs : 1
3.Savoir Programmer (1988) 18 euros, nombre d'auteurs : 3
4.Base de donnée Mysql/Oracle (1994) 18 euros, nombre d'auteurs : 2
5.Architecture des Ordinateurs (2004) 18 euros, nombre d'auteurs : 1
6.Logique et Programmation Logique (2009) 18 euros, nombre d'auteurs : 4
7.Developpement Web (2000) 18 euros, nombre d'auteurs : 2
8.Réseau et Déploiment (2012) 18 euros, nombre d'auteurs : 1
alors que le résultat devrait ressembler a ceci :
0'Reilly ( 3 Livres)
1.Comprendre XSLT (2002) 18 euros, nombre d'auteurs : 2
2.Pratique de MYSQL et PHP (2003) 33 euros, nombre d'auteurs : 1
3.Savoir Programmer (1988) 14 euros, nombre d'auteurs : 3
Dunod ( 5 Livres)
1.Base de donnée Mysql/Oracle (1994) 18 euros, nombre d'auteurs : 2
2.Architecture des Ordinateurs (2004) 53 euros, nombre d'auteurs : 1
3.Logique et Programmation Logique (2009) 13 euros, nombre d'auteurs : 4
4.Developpement Web (2000) 23 euros, nombre d'auteurs : 2
5.Réseau et Déploiment (2012) 10 euros, nombre d'auteurs : 1
S'il vous plait aidez moi
MERCI