J'ai un soucis avec XSLT. Je travaille avec la version 1.0 (c'est pour ça que c'est ch***).
Voici un code (Docbook pour ceux qui ne reconnaîtrait pas) :
Code : Tout sélectionner
<para>Et voici une belle <emphasis>emphase</emphasis>, incroyable non ?</para>Code : Tout sélectionner
<p>Et voici une belle <em>emphase</em>, incroyable non ?</p>La version la plus aboutie que j'ai réussi à produire est :
Code : Tout sélectionner
<xsl:template name="p" match="para">
<p>
<xsl:foreach-each select=".">
<xsl:choose>
<xsl:when test="text()">
<xsl:value-of select="." />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="./*" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</p>
</xsl:template>
</xsl:template>Code : Tout sélectionner
<xsl:template name="em" match="emphasis>
<em>
<xsl:value-of select="." />
</em>
</xsl:template>Code : Tout sélectionner
<p>Et voici une belle emphase, incroyable non ?</p>Le principe (si j'ai compris, ce qui n'est pas assuré) est qu'on utilise une boucle pour passer sur chaque élément de la balise. On teste si on a un texte ou si on a un nœud. Dans le premier cas, on affiche simplement le texte, dans l'autre, on applique les gabarits (templates) adéquates.
En XSLT 2.0 c'est plus clair, mais j'ai comme contrainte XSLT 1.0.
Merci pour vos lumières.