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 !!