[Résolu] Remplacement d'une chaine par <BR/>

Remplacement d'une chaine par <BR/> [Résolu] - XML/XSL - Programmation

Marsh Posté le 09-03-2007 à 10:47:06    

Bonjour !
 
Alors voilà mon soucis : j'ai une chaine de caractères 'bonjour, toto a un gros problème" qui contient une chaine 'toto', chaine que je voudrais remplacer par <br/> et qui serait interprétée comme un retour chariot.
 
Ma fonction :

Code :
  1. <xsl:template name="replace-string">
  2.     <xsl:param name="text"/>
  3.     <xsl:param name="from"/>
  4.     <xsl:param name="to"/>
  5.     <xsl:choose>
  6.       <xsl:when test="contains($text, $from)">
  7. <xsl:variable name="before" select="substring-before($text, $from)"/>
  8. <xsl:variable name="after" select="substring-after($text, $from)"/>
  9. <xsl:variable name="prefix" select="concat($before, $to)"/>
  10. <xsl:value-of select="$before"/>
  11. <xsl:value-of select="$to"/>
  12.         <xsl:call-template name="replace-string">
  13.   <xsl:with-param name="text" select="$after"/>
  14.   <xsl:with-param name="from" select="$from"/>
  15.   <xsl:with-param name="to" select="$to"/>
  16. </xsl:call-template>
  17.       </xsl:when>
  18.       <xsl:otherwise>
  19.         <xsl:value-of select="$text"/> 
  20.       </xsl:otherwise>
  21.     </xsl:choose>           
  22. </xsl:template>


 
L'appel de la fonction :
 

Code :
  1. <xsl:call-template name="replace-string">
  2.   <xsl:with-param name="text" select="MACHAINE"/>
  3.   <xsl:with-param name="from" select="'toto'"/>
  4.   <xsl:with-param name="to" select="&lt;BR&gt;"/>
  5.   </xsl:call-template>


 
Et enfin le résultat affiché :  
 

Code :
  1. bonjour, <BR/> a un gros problème


 
Donc le <BR/> n'est pas interprété !
Pourriez-vous me donner un coup de main ?
 
Merci !
 
EDIT : j'ai tenté de remplacer &lt;BR&gt; par &#10; mais sans succès


Message édité par moldar le 12-03-2007 à 11:42:04
Reply

Marsh Posté le 09-03-2007 à 10:47:06   

Reply

Marsh Posté le 10-03-2007 à 13:05:22    

Il faut utiliser <xsl:element name="br" /> pour créer un élément "dynamique".

Reply

Marsh Posté le 11-03-2007 à 16:38:05    

Pas très clair ce que tu veux...
<br /> c'est un retour chariot... en html.  
 
Si tu génère du texte il faut si prendre autrement. Par exemple à l'aide de <xsl:text>.
Normalement pour obtenir un retour à la ligne j'utilise:


       <xsl:text>
</xsl:text>


 
Note qu'il faut absolument passer à la ligne après l'ouverture de la balise.


Message édité par avander le 11-03-2007 à 16:40:58
Reply

Marsh Posté le 12-03-2007 à 09:44:07    

rx___ > marche po :(
avander > alors je réexplique :D
 
Mon fichier XML :
 
<BALISE>bonjour, toto a un gros problème</BALISE>
 
Je veux dans mon fichier HTML :  
 
bonjour,
a un gros problème
 
Comment dois-je faire (sachant qu'il y a plusieurs occurrence de 'toto' dans la balise <BALISE> )?

Message cité 1 fois
Message édité par moldar le 12-03-2007 à 09:44:52
Reply

Marsh Posté le 12-03-2007 à 11:41:52    

Ayé j'ai trouvé :D
 

Code :
  1. <xsl:template name="convertCrToBr">
  2.     <xsl:param name="string" select="''"/>
  3.     <xsl:choose>
  4.       <xsl:when test="contains($string,'toto')">
  5.         <xsl:value-of select="substring-before($string,'toto')"/>
  6.         <br/>
  7.         <xsl:call-template name="convertCrToBr">
  8.           <xsl:with-param name="string" select="substring-after($string,'toto')"/>
  9.         </xsl:call-template>
  10.       </xsl:when>
  11.       <xsl:otherwise>
  12.         <xsl:value-of select="$string"/>
  13.       </xsl:otherwise>
  14.     </xsl:choose>
  15.   </xsl:template>


 
Merci pour votre aide.

Reply

Marsh Posté le 12-03-2007 à 19:41:43    

moldar a écrit :

rx___ > marche po :(


Curieux ça... (mais j'ai la flemme d'essayer :sleep:)
 
En fait au départ j'avais mal regardé ta stylesheet, je croyais que voulais pouvoir choisir dynamiquement le tag que tu mettais. Mais si tu sais que c'est <br/>, le mettre tel quel est effectivement la bonne méthode. Le processeur xslt copie en effet simplement les éléments qui n'appartiennent pas au namespace http://www.w3.org/1999/XSL/Transform (qui correspond ici au préfix xsl).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed