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