IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] remplacement de chaine dans un fichier XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [XSLT] remplacement de chaine dans un fichier XML
    Bonjour,

    je ne connais pas beaucoup le XSLT, et j'ai besoin de parcourir un arbre XML contenant du texte.
    jusque là c'est facile.
    le souci, c'est que j'ai besoin d'échapper les caractères quote pour transformer cet arbre en requetes d'insertion SQL.

    en gros mon fichier XML se compose ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <labels lang='en'>
             <label id='tutoriels'>
                     <lang_def>Tutoriels</lang_def>
                     <lang_trad>Tutorials</lang_trad>
             </label>
             ........
    </labels>
    et voici actuellement mon fichier XSL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8"/>
    <!-- @author : Sébastien Heymann
         @mail   : <a href="mailto:sebastien.heymann@freezic.info">sebastien.heymann@freezic.info</a>
         @date   : 28-04-2006
    -->
     
    <xsl:variable name="table">Ttraduction</xsl:variable>
     
     
    <xsl:template match="labels">
     
    <xsl:template name="boucle">
      <xsl:param name="text" select="" />
      <xsl:param name="quote" select="'" />
      <xsl:param name="escape_quote" select="\'" />
     
      <xsl:value-of select="concat(substring-before($text,$quote), $escape_quote, substring-after($text, $quote))" />
     
      <xsl:if test="contains($text,$quote)">
        <xsl:call-template name="boucle">
          <xsl:with-param name="text" select="$text" />
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
     
     
            <xsl:for-each select="label">
                    <xsl:text>INSERT INTO </xsl:text>
                    <xsl:value-of select="$table"/>
                    <xsl:text> VALUES('</xsl:text>
                    <xsl:value-of select="@id"/>
                    <xsl:text>','</xsl:text>
                    <xsl:value-of select="../@lang"/>
                    <xsl:text>','</xsl:text>
                    <xsl:choose>
                            <xsl:when test="lang_trad != ''">
    				<xsl:choose>
    					<xsl:when test="contains(lang_trad,$quote)">
    						<xsl:call-template name="boucle">
    						         <xsl:with-param name="text" select="lang_trad" />
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="lang_trad"/>
    						</xsl:otherwise>
    					</xsl:choose>
                            </xsl:when>
                            <xsl:otherwise>
    					<xsl:choose>
    						<xsl:when test="contains(lang_def,$quote)">
    						<xsl:call-template name="boucle">
    							<xsl:with-param name="text" select="lang_def" />
    						</xsl:call-template>
    						</xsl:when>
    						<xsl:otherwise>
    						<xsl:value-of select="lang_def"/>
    						</xsl:otherwise>
    					</xsl:choose>
                            </xsl:otherwise>
                    </xsl:choose>
                    <xsl:text>');
    </xsl:text>
            </xsl:for-each>
    </xsl:template>
     
    </xsl:stylesheet>

    et si je suis là, c'est bien entendu parce que ça ne fonctionne pas
    mon souci, c'est de faire un parcours du texte pour élimiter tous les quotes de chaque texte, et là je bloque.

    Si une âme charitable vient à passer par là, je le remercie par avance !!

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Perso, ton template name "boucle" je le mettrais en dehors du template match "label".
    Sinon, voici un code qui remplace les # par %23, il devrait t'inspirer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <xsl:template name="c_sharp">
    <xsl:param name="txt"/>
    <xsl:if test="string-length($txt)">
    <xsl:choose>
    <xsl:when test="$txt='#'">%23</xsl:when>
    <xsl:when test="contains($txt,'#')">
    <xsl:variable name="before" select="substring-before($txt,'#')"/>
    <xsl:variable name="after" select="substring-after($txt,'#')"/>
    <xsl:if test="string-length($before)"><xsl:value-of select="$before"/></xsl:if>%23<xsl:if test="string-length($after)">
    <xsl:call-template name="c_sharp"><xsl:with-param name="txt" select="$after"/></xsl:call-template>
    </xsl:if>
    </xsl:when>
    <xsl:otherwise><xsl:value-of select="$txt"/></xsl:otherwise>
    </xsl:choose>
    </xsl:if>
    </xsl:template>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    je te remercie, je vais tester tout ça =)

Discussions similaires

  1. [XSLT] Remplacer une valeur dans un fichier XML
    Par NicoV dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/11/2009, 16h21
  2. Remplacer plusieurs chaines dans plusieurs fichiers
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 17/04/2008, 19h16
  3. [XSLT 2.0]Ecriture dans plusieurs fichiers XML
    Par The SorroW dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/02/2008, 17h25
  4. [XSLT]Récupération d'information dans un fichier XML
    Par LoDev dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/01/2008, 09h36
  5. insérer une chaine dans un fichier XML
    Par 242 dans le forum Linux
    Réponses: 2
    Dernier message: 14/12/2006, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo