[XSL] Placer une image avec la feuille de style
Bonjour !
Je débute en XSL, XML, mais à partir de fichiers sources que je dois customiser, je suis tombé sur un problème dont je n'ai pas trouvé la solution grace au bon vieux Google.
(Etant NOOB en xsl xml, je dois mal chercher peut-être :oops: )
J'ai un fichier xml avec ceci dedans (entre autres):
Code:
1 2 3 4 5 6 7 8
| <personnes>
<personne>
<name>Un Nom</name>
<type1>Un type</type1>
<type2>Un autre type</type2>
etc...
</personne>
</personnes> |
et je voudrais en utilisant ma feuille de style XSL de ce type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <xsl:template match="personne">
<tr class="plist">
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="type1">
<td class="plist">
<xsl:apply-templates/>
----->Placer une image ici <---- (dans la page affichée par l'explorateur)
</td>
</xsl:template>
<xsl:template match="type2">
<td class="plist">
<xsl:apply-templates/>
----->Placer une image ici <---- (dans la page affichée par l'explorateur)
</td>
etc... |
j'ai esseyé de mettre aux lignes indiquées :
Code:
<img src="images/{typei}.gif"/>
(i est le numéro correspondant :wink: :P )
pour que celà affiche dans le navigateur l'image relative au typei désiré.
Mais celà ne marche pas.
Qu'est ce qui ne vas pas ?
Citation:
J'ai esseyé avec
Code:
<img src="images/="{./typei}.gif"/>
mais ca ne marche pas non plus.
Re: [XSL] Placer une image avec la feuille de style
Bonjour,
il s'agit tout simplement d'un problème d'expression XPath. Ton expression {typei} se trouve dans un template pour les éléments typei ; ce qui signifie que lorsque cette expression est évaluée, le noeud courant est un typei.
Les expressions XPath peuvent être de deux types : absolu ou relatif. Une expression est absolue, quand elle commence par / (la recherche démarre à la racine du document XML), sinon elle est relative et la recherche à partir du noeud courant (ou noeud contextuel).
Il faut également absolument savoir que l'axe XPath utilisé par défaut dans une expression, quand aucun autre axe n'est précisé, est l'axe child (enfant). Donc, en écrivant {typei}, (que tu aurais pu écrire {child::typei} ce qui serait revenu au même) tu demandes littéralement à XPath de te renvoyer le contenu des éléments typei fils de l'élément courant. Evidemment, ce n'est pas ce qui est recherché.
En fait, ce que l'on veut est le contenu de l'élément courant, qu'on peut obtenir en utilisant l'axe self :
Code:
<img src="images/{self::*}.gif"/>
ou alors, pour une syntaxe plus lisible, en utilisant l'abbrévation de l'axe self qui est le point :
Code:
<img src="images/{.}.gif"/>
D'autre part, il semble que le traitement soit le même pour tous les typei, quelle que soit la valeur de i ; si c'est le cas, tu as tout intérêt à les traiter tous dans le même template :
Code:
1 2 3 4 5 6
| <xsl:template match="type1|type2">
<td class="plist">
<xsl:apply-templates/>
<img src="images/{.}.gif"/>
</td>
</xsl:template> |