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 :

incrementer une variable en xsl


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut incrementer une variable en xsl
    Bonjour,

    Je souhaite incrementer une variable en xsl, mais j'ai toujours une erreur.
    Je n'arrive meme pas a en declarer une et a l'afficher.


    J'ai essayer le code suivant dans la declaration:

    <xsl:variable name="valeur" select="0"/>

    et de l'afficher en faisant:

    <xsl:value-of select="valeur"/>

    mais j'ai aucun affichage. Si quelqu'un a une idée merci.

  2. #2
    Membre Expert 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
    Par défaut
    Premièrement, il faut écrire <xsl:value-of select="$valeur"/> pour lire le contenu de la variable...

    De plus, une variable XSLT ne s'incrémente pas... puisque sa valeur est fixe !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    pourtant j'ai vu des solutions tel que :

    <xsl:variable name="valeur" select="{$valeur+1}"/>

    mais ca ne marche pas t'as pas une idée stp?

  4. #4
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    on peut incrmenter une variable en utilisant des fonctions mais cela est compiqué et non dans l'esprit "xsl"
    mais que souhaites tu faire avec ton incrémentale?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Je souhaite compter le nombre de fois que je vais dans une boucle.

    voici le code:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:java="http://xml.apache.org/xslt/java" xmlnssl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/" name="formation">
    <xsl:param name="article" select=".//system-index-block[@name = 'media']/calling-page/system-page[@current = 'true']/system-data-structure[@definition-path = 'Formation/Article']"/>

    <xsl:param name="news" select=".//system-index-block[@name = 'media']/system-folder/system-folder/system-page/system-data-structure[@definition-path = 'Formation/News']"/>

    <xsl:param name="newsAbout">/formation/about/news/</xsl:param>
    <xsl:param name="newsProject">/formation/projects/news/</xsl:param>
    <xsl:variable name="valeur" select="0"/>


    <div>
    Title :
    <xsl:value-of select="$article/title"/>
    <br/>

    Paragraph1 :
    <xsl:value-of select="$article/paragraph1"/>
    <br/>

    Paragraph2 :
    <xsl:value-of select="$article/paragraph2"/>
    <br/>
    <img>
    <xsl:attribute name="src">
    <xsl:value-of select="$article/relatedImage/path"/>
    </xsl:attribute>
    <xsl:attribute name="alt">
    <xsl:value-of select="$article/relatedImage/name"/>
    </xsl:attribute>
    </img>

    <ul>
    <xsl:for-each select="$news">
    <xsl:sort data-type="text" select="./title"/>
    <xsl:variable name="temp" select="../path"/>
    <xsl:variable name="temp1" select="../name"/>
    <xsl:variable name="temp2" select="substring-before($temp,$temp1)"/>
    <xsl:if test="($newsAbout=$temp2) or ($newsProject=$temp2)">
    <xsl:variable name="valeur" select="$valeur+1"/>
    <li>
    <a>
    <xsl:attribute name="href">
    <xsl:value-of select="../path"/>
    </xsl:attribute>
    <xsl:value-of select="./title"/>
    </a>
    <br/>
    <xsl:value-of select="./description"/>
    </li>
    </xsl:if>
    </xsl:for-each>
    <xsl:value-of select="count($news)"/> / <xsl:value-of select="$valeur"/>
    </ul>
    </div>


    </xsl:template>
    </xsl:stylesheet>

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Par défaut
    As tu essayé cette solution :

    <xsl:variable name="pm" select="count(//balise)"/>

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    oui sofresh c'est ce que j'ai fait car apparement faire +1 a une variable c'est pas possible. mais j'arrive a faire des additions donc je comprend pas trop.

  8. #8
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    le soucis viens du faite que tu initialises pas la variable $valeurs dans la boucle

  9. #9
    Membre Expert 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
    Par défaut
    Citation Envoyé par fraoustin Voir le message
    le soucis viens du faite que tu initialises pas la variable $valeurs dans la boucle
    Non !
    La gestion des variables en XSLT est claire : une valeur fixe est associée à chaque variable et la portée d'une variable s'étend sur tous les éléments frères qui suivent sa définition et leurs descendants.

    Demander la valeur d'une variable non définie retourne une valeur vide ou une erreur selon l'implémentation.

  10. #10
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    si quand on initialise pas une variable on obtient une erreur ,(qu'on aurait pas eu si la variable avait été initialisé) ma remarque: il faudrait initialiser la variable n'est pas si fausse

  11. #11
    Membre Expert 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
    Par défaut
    Il faut recentrer la discussion...

    Le terme "initialisation" est plutôt impropre au XSLT dès lors qu'une seule valeur peut être assignée.

    La résolution du problème posé ne passe pas par une "initialisation" mais bien par l'acceptation qu'une variable XSLT est non modifiable : il faut penser la programmation XSLT autrement que la programmation 3G !

  12. #12
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    bonjour,
    bon vous arrêtez d'embettez alain un peu ? !!

    il a raison, une variable elle reste comme elle est en xsl ...
    on peut la modifier (voir exemple compteur du site dev.com) mais c'est quand meme assez lourd et peu pratique et applicable dans un nombre tres limité de cas ...............

    En plus comme alain a deja dit :
    tu veux compter le nombre de fois que tu vas passer dans ta boucle for-each
    ben tu fais un count de la condition de ton for each ......... je fais idem, ca coule de source.

    allez ++ les amies

    et attention je vous ai à l oeil

Discussions similaires

  1. Incrementer une variable de type record
    Par yann87 dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2009, 15h57
  2. incrementer une variable
    Par kaking dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/06/2008, 08h43
  3. Incrementer une variable du type mysql_fetch_array
    Par furtif1 dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2007, 15h23
  4. [C#] Comment incrémenter une variable session ?
    Par Sup@Lou dans le forum ASP.NET
    Réponses: 5
    Dernier message: 14/05/2006, 18h24
  5. [XSLT] incrementer une variable
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 02/11/2005, 10h44

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