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] variable définie plusieurs fois dans la même portée


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut [XSLT] variable définie plusieurs fois dans la même portée
    Bonjour,

    je viens de mettre en exploitation une application web sur un apache tomcat qui utilise des feuilles XSL.
    En test, je n'avais aucune erreur mais lors de la mise en exploitation, voilà l'erreur générée dans les logs du serveur :

    ERREUR : 'file:***/xsl/inventaireDesDonnees.xsl: line 523: La variable 'envirDesc' est définie plusieurs fois dans la même portée.'
    ERREUR BLOQUANTE : 'Impossible de compiler la feuille de style'

    Cela vient donc de la variable 'envirDesc' qui est définie 2 fois dans inventaireDesDonnees.xsl. C'est effectivement le cas. Voici la portion du code concernée :

    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
     
    <!-- support d'archivage des données -->
    <xsl:if test="dataIdInfo/envirDesc !=''">
     
              <xsl:variable name="envirDesc">
            		<xsl:call-template name="replace">
                      		<xsl:with-param name="str" select="dataIdInfo/envirDesc"/>
                      		<xsl:with-param name="find">voltot</xsl:with-param>
                      		<xsl:with-param name="rep" select="$libVolTot"/>
                		</xsl:call-template>
              </xsl:variable>
     
              <xsl:variable name="envirDesc">
              		<xsl:call-template name="replace">
                      		<xsl:with-param name="str" select="dataIdInfo/envirDesc"/>
                      		<xsl:with-param name="find">/n</xsl:with-param>
                      		<xsl:with-param name="rep">&lt;BR/&gt;</xsl:with-param>
              		</xsl:call-template>
              </xsl:variable>
    		<b><xsl:value-of select="$libSupportArchivage"/> : </b><xsl:value-of select="$envirDesc" disable-output-escaping="yes"/><xsl:copy-of select="$br"/><xsl:copy-of select="$br"/>
     
    </xsl:if>
    avec le template replace suivant :

    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
     
    <xsl:template name="replace">
            <xsl:param name="str" />
            <xsl:param name="find" />
            <xsl:param name="rep" />
            <xsl:choose>
                <xsl:when test="contains($str,$find)">
                    <xsl:value-of select="substring-before($str,$find)" />
                    <xsl:value-of select="$rep" />
                    <xsl:call-template name="replace">
                        <xsl:with-param name="str" select="substring-after($str,$find)" />
                        <xsl:with-param name="find" select="$find" />
                        <xsl:with-param name="rep" select="$rep" />
                    </xsl:call-template>
                 </xsl:when>
                 <xsl:otherwise>
                    <xsl:value-of select="$str" />
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>

    Je ne connais que très peu XSL donc je me tourne vers vous pour savoir quelle parade adoptée.
    Est-il possible de regrouper les 2 opérations de remplacement "call-template replace" sous la même variable ?
    Toute suggestion sera la bienvenue

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Une variable XSL-T ne peut pas être modifiée...

    Il vous suffit d'enchainer les deux remplacements en définissant une première variable comme résultat du premier remplacement puis en la passant en paramètre du second remplacement pour aboutir dans une seconde variable !
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut ça donne ça ?
    Donc si je comprends bien, ça donne ça :

    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
     
    <!-- support d'archivage des données -->
    <xsl:if test="dataIdInfo/envirDesc !=''">
     
              <xsl:variable name="envirDesc_tmp">
            		<xsl:call-template name="replace">
                      		<xsl:with-param name="str" select="dataIdInfo/envirDesc"/>
                      		<xsl:with-param name="find">voltot</xsl:with-param>
                      		<xsl:with-param name="rep" select="$libVolTot"/>
                		</xsl:call-template>
              </xsl:variable>
     
              <xsl:variable name="envirDesc">
              		<xsl:call-template name="replace">
                      		<xsl:with-param name="str" select="$envirDesc_tmp"/>
                      		<xsl:with-param name="find">/n</xsl:with-param>
                      		<xsl:with-param name="rep">&lt;BR/&gt;</xsl:with-param>
              		</xsl:call-template>
              </xsl:variable>
    		<b><xsl:value-of select="$libSupportArchivage"/> : </b><xsl:value-of select="$envirDesc" disable-output-escaping="yes"/><xsl:copy-of select="$br"/><xsl:copy-of select="$br"/>
     
    </xsl:if>
    Oui ? ou je n'ai pas bien compris ?
    Merci encore

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/12/2014, 00h37
  2. utilisation de script js plusieurs fois dans une même page
    Par tribalnanasss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/07/2010, 00h34
  3. Réponses: 1
    Dernier message: 28/05/2009, 22h45
  4. Réponses: 39
    Dernier message: 24/08/2008, 17h16
  5. Réponses: 4
    Dernier message: 21/11/2007, 12h19

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