(Courriels de diversion: <civilisa@changerent-projeterent.com> <ramollira@hortensias-rivaliserons.com> <adossera@decaisseras-accueillirent.com> <manufacturions@circonviendrez-temple.com> <chauffee@rêvez-ennuierions.com> <analysions@beurrer-deliera.com> <accomplissions@coupelle-categorie.com> <assureriez@gendarmees-mandats.com> <montrerais@ristourne-chevaucha.com> <giratoires@lâcheriez-exulterons.com> )
...mais c'est pas du Linux.
Je veux afficher en HTML un arbre XML contenant mon <nom/>
suivi de mon <prenom/> qui sont contenus dans un tag
<content> </content>
(allez voila le source pour pas vous faire des noeuds:
<content>
<nom> Rossel </nom>
<prenom> Olivier </prenom>
</content>
facile....)
en HTML.
Je voudrais que l'affichage en HTML soit le meme pour le
nom et pour le prenom, c a d en gras (par exemple).
Methode 1:
Dans ma feuille de style XML->HTML, je dis donc que je
veux que ca se passe comme ca dans <content>:
<xsl:template match="content"> <-- dans le tag "content"
<b> <-- met le tag <b> dans la sortie
<xsl:value-of select="nom"/> <-- met le contenu du sous-tag "nom" dans la sortie
</b> <-- met le tag </b> dans la sortie
<b> <-- met le tag <b> dans la sortie
<xsl:value-of select="prenom"/> <-- met le contenu du sous-tag "prenom" dans la sortie
</b> <-- met le tag </b> dans la sortie
</xsl:template>
Ca marche bien et ce qui est bien c'est qu'en changeant
ma stylesheet de cette facon:
<xsl:template match="content">
<b>
<xsl:value-of select="prenom"/>
</b>
<b>
<xsl:value-of select="nom"/>
</b>
</xsl:template>
J'ai inverse le nom et le prenom dans la sortie HTML, quel
que soit l'ordre du fichier XML d'origine.
En fait, je hard-code, dans la stylesheet, l'ordre
d'affichage des sous-tag.
Methode 2:
Dans la stylesheet, je fais quelque chose de generique pour
tout ce qui doit etre formatte en gras:
<xsl:template match="content"> <-- dans le tag "content"
<xsl:for each select="nom|prenom"> <-- selectionne, 1 par 1, chaque sous-tag "nom" ou "prenom"
<b> <-- met le tag <b> dans la sortie
<xsl:value-of select="."/> <-- met le contenu du sous-tag selectionne dans la sortie
</b> <-- met le tag </b> dans la sortie
</xsl:for-each>
<xsl:template>
L'interet de cette methode, c'est d'avoir le code de
formattage ecrit une seule fois, quel que soit
le nombre et le type de tags selectionnes.
Probleme: je ne suis pas maitre de l'ordre dans lequel
les tags sont parsés. Cet ordre correspond forcement a
l'ordre d'apparition dans le XML d'origine.
Si <nom/> est en premier, il sera en premier dans la
sortie HTML, et le prenom apres.
Si c'est le <prenom/> qui est en premier dans le fichier
XML, c'est lui qui apparaitra en premier dans la sortie HTML.
Question (ouf, enfin):
La methode 2 me parait infiniment plus propre que la methode 1.
Existe t'il un moyen de contraindre l'ordre du traitement
des noeuds XML, en fonction de leur type.
Une mousse a celui qui repond juste. Vous avez 3 heures.
lOlive
(qui fume...)
---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>