XSL : remplacer une chaine de caractère

XSL : remplacer une chaine de caractère - XML/XSL - Programmation

Marsh Posté le 01-12-2006 à 11:48:07    

Bonjour !
 
Voilà mon problème :
J'ai un fichier XML qui contient une balise <phrase> :
<phrase>Forum Hardware /CR/ Créer un nouveau sujet /CR/</phrase>
 
Je voudrais remplacer toutes les occurrences de /CR/ par des <BR/>
J'ai déja testé avec un translate mais ça me fait absolument n'importe quoi :D
 
Merci !

Reply

Marsh Posté le 01-12-2006 à 11:48:07   

Reply

Marsh Posté le 01-12-2006 à 15:37:15    

Translate n'est pas fait pour ça, il te faut un stylesheet recursif.  
 
L'exemple ci-joint remplace des CR par des <br /> dans le contenu d'un element code d'un xml donné:
 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!-- gReplaces text in xml code with markup -->
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="xml" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- global variables -->
  <xsl:variable name="gReplace"><!-- replace target here is CR -->
    <xsl:text>
</xsl:text></xsl:variable>
 
<!-- transformations -->
 
  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
 
 
  <xsl:template match="//code/text()"><!-- replace only in code elements -->
    <xsl:call-template name="doReplace">
      <xsl:with-param name="text" select="."/>
    </xsl:call-template>
 
  </xsl:template>
 
 
  <xsl:template name="doReplace">
    <xsl:param name="text"/>
 
    <xsl:choose>
      <xsl:when test="contains( $text, $gReplace)">
        <xsl:value-of select="substring-before( $text, $gReplace)"/>
        <!-- substitue gReplace occurence with <BR /> string -->
        <xsl:element name="br"/>
        <xsl:call-template name="doReplace"><!-- recurse -->
          <xsl:with-param name="text" select="substring-after( $text, $gReplace)"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
T'as de la chance que c'est bientôt la St-Nicolas...


Message édité par avander le 01-12-2006 à 15:46:28
Reply

Marsh Posté le 01-12-2006 à 15:59:35    

Merci m'sieur :jap:

Reply

Sujets relatifs:

Leave a Replay

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