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 :

Instruction de rupture de séquence itérative avec XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Instruction de rupture de séquence itérative avec XSL
    Bonjour à tous,
    J’aimerai savoir si il existe en XSL des instructions de rupture de séquence itérative basées sur le test d'une variable numérique incrémenté.

    En gros je voudrais simplement faire l'équivalent de ceci en XSL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i=0;
    while(i<10){
        <xsl:text>Hello : <b><xsl:value-of select="$i"/></b><br/></xsl:text>
         i=i+1
    }
    Ca parait bête mais je ne trouve pas d'équivalence.

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Je sais pas si c'est ca que tu recherche mais tu peux faire une boucle sur un élément répétitif de ton xml!

    Pour ca, il te faut utiliser position() qui est comme un peu ton i sauf qu'il s'incrémente tout seul en fonction de la position de l'élément répétitif!

    tu ferra un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <xsl:for-each select="/ton élément répétitif[position() &lt; 10]">
    ce que tu veux faire
    </xsl:for-each>
    & lt ; (sans espace) reprèsente < ! car si tu mets < ton parseur fera une erreur

    ++

    Thierry

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 34
    Points : 39
    Points
    39
    Par défaut
    Pour faire celà, j'utlise l'équivalent d'une "fonction" sous XSL, c'est-à-dire un template appelé avec call-template. Pour que ça marche j'utilise une fonction (un template) récursif.

    Je passe 2 paramètres à mon template que j'ai appelé ici "test" : le nombre d'itération souhaité (param Nb_Occurences), et la valeur du compteur (param compteur)
    A chaque itération, je vérifie que le compteur est inférieur au nombre d'itérations, puis si c'est le cas, je fais ce que j'ai à faire, puis j'incrémente mon compteur. (Si ce n'est pas le cas, je ne fais rien : j'ai fini)
    Ensuite il ne me reste plus qu'à rappeler mon template avec mon nombre d'itération qui n'a pas changé et mon compteur qui a été incrémenté de 1

    Voici mon code :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	<xsl:template match="/">
    		<xsl:call-template name="test">
    			<xsl:with-param name="Nb_Occurences" select="10"/>
    			<xsl:with-param name="compteur" select="0"/>
    		</xsl:call-template>
    	</xsl:template>
    	<xsl:template name="test">
    		<xsl:param name="Nb_Occurences"/>
    		<xsl:param name="compteur"/>
    		<xsl:if test="$compteur &lt; $Nb_Occurences">
    			<xsl:text>Hello : </xsl:text>
    			<xsl:value-of select="$compteur"/>
    			<xsl:text>bye</xsl:text>
    			<xsl:variable name="Next_compteur" select="$compteur + 1"/>
    			<xsl:call-template name="test">
    				<xsl:with-param name="Nb_Occurences" select="$Nb_Occurences"/>
    				<xsl:with-param name="compteur" select="$Next_compteur"/>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
    </xsl:stylesheet>
    C'est certes un peu lourd mais perso j'ai pas trouvé d'autre solution. D'ailleurs si quelqu'un a mieux je suis preneur !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Super merci à tous les deux!!!!

    La fonction récursive fera parfaitement l'affaire. (même si je m'attendais à une solution un peu moins lourde)

    Pour le for-each le problème est que je n'ai pas d'éléments répétés à la base de ma transformation...

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. [débutant]XML vers XML avec XSL
    Par tokamak dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/07/2005, 10h27
  3. XML vers XML avec XSL
    Par guizz79 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2005, 09h43
  4. [XSL]problème avec <xsl:when>
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 27/05/2005, 16h54
  5. Questionnaire à réaliser avec XSL et XML
    Par olive.m dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 19/11/2003, 16h37

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