Hey ,
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) :
La version la plus aboutie que j'ai réussi à produire est :
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.
Modifié par HyWaN (04 Jan 2009 - 23:43)
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) :
<para>Et voici une belle <emphasis>emphase</emphasis>, incroyable non ?</para>
J'aimerais le transformer en : <p>Et voici une belle <em>emphase</em>, incroyable non ?</p>
Et bah j'arrive pas :cry:.La version la plus aboutie que j'ai réussi à produire est :
<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>
avec bien sûr : <xsl:template name="em" match="emphasis>
<em>
<xsl:value-of select="." />
</em>
</xsl:template>
Ce qui me produit : <p>Et voici une belle emphase, incroyable non ?</p>
J'ai beau tourné le problème dans tous les sens, je n'arrive pas à trouver la bonne condition …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.
Modifié par HyWaN (04 Jan 2009 - 23:43)