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

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 4 heures et 25 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59