Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Vins' blog

Blog technique de Vincent Bellet sur le monde Microsoft : actualités, Imagine Cup, .NET...
XSL : remplacer une chaîne de caractères

Hello,

Ayant eu récemment le cas, je vous partage une solution pour ce genre de problématique. Cela peut s'avérer utile par exemple pour faire une modification sur une chaîne récurrente.

Objectif : avoir un moyen qui permette dans une chaîne de caractères donnée de remplacer une partie de la chaîne par une autre.

Solution : créer un template récursif prenant 3 paramètres, la chaîne à analyser, la chaîne à remplacer, la nouvelle valeur de la chaîne.

Grosso modo vous vous retrouvez avec un code qui ressemble à ça:

<xsl:template name="replace-string">
  <xsl:param name="str" />
  <xsl:param name="strToReplace" /> 
  <xsl:param name="newStr" />

  <xsl:if test="string-length(substring-before($str,$strToReplace)) =0"> 
    <xsl:value-of select="$str" /> 
  </xsl:if> 
  <xsl:if test="string-length(substring-before($str,$strToReplace)) > 0"> 
    <xsl:value-of select="substring-before($str,$strToReplace)" /> 
    <xsl:value-of select="$newStr" /> 
  </xsl:if>

  <xsl:if test="string-length(substring-after($str,$strToReplace)) > 0"> 
    <xsl:call-template name="replace-string"> 
      <xsl:with-param name="str" select="substring-after($str,$strToReplace)" /> 
      <xsl:with-param name="strToReplace" select="$strToReplace" /> 
      <xsl:with-param name="newStr" select="$newStr" /> 
    </xsl:call-template> 
  </xsl:if>
</xsl:template>

Il ne vous reste plus qu'à appeler votre template avec le traditionnel apply-templates et en précisant les valeurs des 3 paramètres.

Le tour est joué!

Vincent

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 23 avril 2008 00:46 par ElVins
Classé sous : ,

Commentaires

cyril a dit :

sympa :)

moi j'avais fait ça :

<xsl:stylesheet xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:cs="http://schemas.codes-sources.com/Docx2Html/" ...="" />

<msxml:script language="C#" implements-prefix="cs">

   public String Replace(String s)

   {

   return s.Replace(" ", " ");

   }

 </msxml:script>

<xsl:value-of select="cs:Replace(.)" />

# avril 23, 2008 02:10

Renfield a dit :

énorme, cyril : j'ignorais que l'on pouvais coller du C# dans des XSL

# avril 23, 2008 09:11

ElVins a dit :

Effectivement la solution de Cyril fonctionne, cependant je voulais montrer que l'on pouvait le faire sans utilisation de .NET.

Effectivement si vous êtes dans une situation où vous générez votre XSL sans la plateforme .NET, la solution purement template prendra tout son intérêt

Merci Cyril pour apporter ta vision client ^^, :p

# avril 23, 2008 10:53
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Disparition de variables de session PHP après une redirection ? par MadMatt le il y a 9 heures et 48 minutes

- [MOSS 2007] Publier ses formulaires InfoPath via feature par Adrien Siffermann le il y a 12 heures et 55 minutes

- Imagine Cup 2008 - Paris - Les résultats par TheSaib .NET blog le il y a 14 heures et 17 minutes

- L'Egypte accueille Imagine Cup 2009 par Code is poetry le il y a 14 heures et 29 minutes

- PowerShell : Mise en ligne de fonctions intéressantes pour SharePoint par Blog Technique de Romelard Fabrice le il y a 15 heures et 36 minutes

- Raccourcis clavier et CRM 4 par Clark, C#, MSCRM, SBS le il y a 19 heures et 42 minutes

- [Silverlight] Comment échanger des données entre une application Silverlight et une page ASP.NET via cookies ? par Thomas Lebrun le il y a 20 heures et 18 minutes

- SharePoint 2007 : Trouver les fichiers CheckOut dans une librairie de document par Philippe Sentenac [MVP SharePoint] le il y a 22 heures et 46 minutes

- [Open XML] Travailler avec Open XML : Linq To XML (Partie 2 - Requêtes/XPath) par Julien Chable le 07-08-2008, 02:05

- [Open XML] Travailler avec Open XML : Linq To XML (Partie 1 - Namespace) par Julien Chable le 07-08-2008, 00:44