xslt - XML/XSL - Programmation
Marsh Posté le 28-08-2008 à 10:24:11
Rien de sorcier... tu fais un template pour ton élément toto:
- tu obtiens le premier et le deuxième caractère avec une des fonctions XPath comme substring(), substring-after(), substring-before().
- tu génère une élément toto avec deux tata's avec xsl:element et xsl:attribute.
Marsh Posté le 15-09-2008 à 14:39:26
Merci de ton aide mais il me reste un probleme
Voici mon code
<xsl:template match="toto">
<xsl:choose>
<xsl:when test="contains(.,';')">
<xsl:call-template name="traitetoto">
<xsl:with-param name="text" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<toto><xsl:value-of select="."/></toto>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="traitetoto">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="not(contains($text,';'))">
<toto><xsl:value-of select="."/></toto>
</xsl:when>
<xsl:otherwise>
<toto><xsl:value-of select="substring(.,';')"/></toto>
<xsl:call-template name="traitetoto">
<xsl:with-param name="text" select="substring-after(.,';')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Au debut j'ai
<toto>123 ; 456</toto>
Je me retrouve avec
<toto>123 </toto>
<toto>123 ; 456</toto>
Au lieu de
<toto>123 </toto>
<toto>456</toto>
Nota bene je boucle car je peux avoir n+ <toto> (<toto>123 ; 456 ; 789</toto> )
Est ce que je suis bien parti et comment faire pour supprimer texte que j'ai deja repris
Merci bcp
Marsh Posté le 16-09-2008 à 09:45:23
Voici toujours un stylesheet similaire qui remplace les retours à la ligne par des <br /> dans les élements <code>, c'est le même problème et il utilise également la récursivité:
<?xml version="1.0" encoding="ISO-8859-1"?> |
Marsh Posté le 16-09-2008 à 14:27:27
<xsl:template name="traitetoto">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="not(contains($text,';'))">
<toto><xsl:value-of select="."/></toto>
</xsl:when>
<xsl:otherwise>
<toto><xsl:value-of select="substring(.,';')"/></toto>
<xsl:call-template name="traitetoto">
<xsl:with-param name="text" select="substring-after(.,';')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Dans ton template, tu as l'air de croire que le . designe le parametre $text à certains endroits, ce qui n'est pas le cas. Emploies le parametre, comme il est d'ailleurs fait dans l'exemple que tu viens de poster.
De plus, tu as confondu dans le deuxieme ligne en rouge, substring et substring-before.
A+,
Marsh Posté le 18-09-2008 à 14:55:29
Un grand merci
cela m'a bcps avancer
Cordialement POPCORN
Marsh Posté le 27-08-2008 à 14:40:41
Bonjour
Je cherche a faire une action dans un element xml grace a un caractere
Pour exemple j'ai <toto>123 ; 456</toto>
et je voudrais que cela devienne <toto> <tata>123</tata> <tata>456</tata> </toto>
Merci d'avance si vous avez une solutions XSLT a me proposer