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][XPATH ] Portée d'une variable locale


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 84
    Points
    84
    Par défaut [XSLT][XPATH ] Portée d'une variable locale
    Voilà ci-dessous une portion du template:

    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
    <xsl:template name="recursive" match= "SpecificSection">
    <xsl:param name="counter" />
    <xsl:variable name="nb"/>
    <xsl:if test="@type='split'">
    <xsl:variable name="separator" select="@separator"/>
    <xsl:for-each-group select="//*" group-by="@level">
    <xsl:variable name="level" select="tokenize(@level, ';')"/>
    <xsl:element name="{$level[2]}" namespace="{namespace-uri()}">
    <xsl:for-each  select="current-group()">
    <xsl:variable name="tokenizedSample" select="tokenize(current(), $separator)"/>
    <xsl:element name="{name(.)}" namespace="{namespace-uri()}">
    <xsl:value-of select="$tokenizedSample[$counter]" ></xsl:value-of>
    </xsl:element>
    </xsl:for-each>
    </xsl:element>
     
    <xsl:if test="$counter &lt; 4">
    <xsl:call-template name="recursive">
    <xsl:with-param name="counter" select="$counter+1"/>
    </xsl:call-template> 
     
    </xsl:if>
    </xsl:for-each-group>             
    </xsl:if>
    </xsl:template>
    Je voudrais assigner comme value à ma variable "nb", le nombre d'éléments de la liste "tokenizer" pis ensuite au lieu d'avoir xsl:if test="$counter &lt; 4", je voudrais avoir xsl:if test="$counter &lt;= $nb. Ca parait tout simple mais en fait ça marche pas. Je tombe dans une loop infinie.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    nb, n'est jamais initialisé!
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  3. #3
    Membre régulier Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 84
    Points
    84
    Par défaut
    Ben en fait, je comptais mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="nb" select="count($tokenizedSample)">
    dans cette partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:for-each  select="current-group()">
    <xsl:variable name="tokenizedSample" select="tokenize(current(), $separator)"/>
    <xsl:element name="{name(.)}" namespace="{namespace-uri()}">
    <xsl:value-of select="$tokenizedSample[$counter]" ></xsl:value-of>
    </xsl:element>
    </xsl:for-each>
    Mais en fouinant sur le web, je viens de trouver que la portée de ma variable n'ira pas plus loin que le tag </xsl:for-each>

    Alors je peux pas utiliser cette méthode .... dur la vie

    En fait il me faut grouper tous les éléments ayant le même "level", je splitte la variable level pour avoir les tags de sortie et hop j'écris les valeurs récupérées par group-by en sortie.

    Avec un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <RemoteSlaveFQDN type="split" separator="," level="A;B">a,b</RemoteSlaveFQDN>
    <RemoteSlaveIP type="split" separator="," level="A;B">1,2</RemoteSlaveIP>
    devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <A>
    <B>
    <RemoteSlaveFQDN>a</Remote...>
    <RemoteSlaveIP>1</Remote....>
    </B>
    <B>
    <RemoteSlaveFQDN>b/Remote...>
    <RemoteSlaveIP>2/Remote....>
    </B>
    </A>
    Je me demande si cela est vraiment faisable

    Ah oui le tout sans lire 'RemoteSlaveFQDN' et 'RemoteSlaveIP'....

Discussions similaires

  1. [XSLT]comment utiliser xsl:if avec une variable
    Par dbill dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/08/2007, 13h23
  2. [XSLT] probleme de resultat retourné par une variable
    Par coucouA dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/08/2006, 11h05
  3. [XSLT] Réutiliser un contexte mémorisé dans une variable
    Par camboui dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/01/2006, 12h49
  4. probleme avec la PORTE DE VIE D'UNE VARIABLE EN PHP
    Par stomerfull dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2005, 14h19
  5. probleme avec la PORTE DE VIE D'UNE VARIABLE EN PHP
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h17

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