Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1056 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  XSL : remplacer une chaine de caractère

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XSL : remplacer une chaine de caractère

n°1484839
moldar
Eleveur de saltices
Posté le 01-12-2006 à 11:48:07  profilanswer
 

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 !

mood
Publicité
Posté le 01-12-2006 à 11:48:07  profilanswer
 

n°1485022
avander
Posté le 01-12-2006 à 15:37:15  profilanswer
 

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
n°1485036
moldar
Eleveur de saltices
Posté le 01-12-2006 à 15:59:35  profilanswer
 

Merci m'sieur :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  XSL : remplacer une chaine de caractère

 

Sujets relatifs
[C# .Net] Recuperer un chaine contenu dans un SubItems d'une ListviewInsertion de compteur javascript dans feuille XSL
[MySQL] Problème avec requête et condition INretourner dans une chaine un fichier PHP interprété
[JS ] chaine de caractère tronquée par un point d'interrogationpbm chaine de caractère - formulaire POST
[C++] Chaine littérale en tant qu'argument par défautinsertion d'une chaine au coeur d'une utre
Plus de sujets relatifs à : XSL : remplacer une chaine de caractère


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR