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 :

[débutant] [XSLT]boucle for


Sujet :

XSL/XSLT/XPATH XML

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 19
    Points
    19
    Par défaut [débutant] [XSLT]boucle for
    salut tout le monde

    savez vous comment transormer ce code en un code dynamiqye avec une boucle equivalente à celle de for dans java ou c

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <xsl:choose>
    		<xsl:when test=". &lt;= 100">
    			<xsl:value-of select="."/>
    		</xsl:when>
     
    		<xsl:otherwise>
    			<xsl:value-of select="substring(substring(., 1), 1, 120)"/>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 121), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 211), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 301), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 391), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 481), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 571), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 661), 1, 90)"/>
    			</fo:block>
    			<fo:block>
    			<xsl:value-of select="substring(substring(., 751), 1, 90)"/>
    			</fo:block>
     
    		</xsl:otherwise>
    	</xsl:choose>
    mais je veux que ma boucle soit infinie du genre tantque 1>0
    j'ai essayé avec ce code mais ca marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:template name="Boucle">
    			<xsl:param name="i"/>
    			<xsl:if test="i<10000">
    			<fo:block>
    			<xsl:value-of select="substring(substring(., i), 1, 90)"/>
    			</fo:block>
     
     
    			<xsl:call-template name="Boucle">
    			<xsl:with param name="i" select="number($i)+90"/>
    			</xsl:call-template>
    			</xsl:template>
    merci pour votre aide

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    Pourrais tu nous envoyer un bout de ton XML et nous expliquer avec ce que tu veux faire comme type de boucle...

    Merci

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template name="Boucle">
    			<xsl:param name="i"/>
    			<xsl:if test="$i<10000">
    			<fo:block>
    			<xsl:value-of select="substring(substring(., $i), 1, 90)"/>
    			</fo:block>
    			
    			
    			<xsl:call-template name="Boucle">
    			<xsl:with param name="i" select="number($i)+90"/>
    			</xsl:call-template>
    			</xsl:template>

    Tu as raison, les boucles en xsl se font avec des appels récursifs à un template. Ton code semble bon, mais il y a quelques "$" qui manquent! Voir ci-dessus.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    merci pour vos réponses

    Ton code semble bon, mais il y a quelques "$" qui manquent!
    merci bouffa mais je la mis à quelle niveau ma boucle ?
    j'ai mis comme ç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
    23
    24
    25
    26
    27
    28
    29
     
    <xsl:choose>
    		<xsl:when test=". &lt;= 100">
    			<xsl:value-of select="."/>
    		</xsl:when>
     
    		<xsl:otherwise>
    			<xsl:value-of select="substring(substring(., 1), 1, 120)"/>
    			<fo:block>
     
     
     
    <xsl:template name="Boucle">
    			<xsl:param name="i"/>
    			<xsl:if test="$i<10000">
    			<fo:block>
    			<xsl:value-of select="substring(substring(., $i), 1, 90)"/>
    			</fo:block>
     
     
    			<xsl:call-template name="Boucle">
    			<xsl:with param name="i" select="number($i)+90"/>
    			</xsl:call-template>
    			</xsl:template>
     
     
     
    		</xsl:otherwise>
    	</xsl:choose>

    mais ca marche pas !
    xsl:template is not allowed in this position in the stylesheet!
    alors voila !

    et pour Little_flower merci pour ta réponse; en fait je voulais découper les langue string qui dépasse la largeure d'une page sur plusieures lignes autant de lignes qu'il faut alors j'ai pensé à une boucle ( c'est vrais il y a mieu , en testant sur le longeure de la chaine ) et pour le fichier xml je pense ca va rien rajouter car c'est peut génerale

    alors il y a pas une solution à mon problème ?
    et merci encore

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Pour commencer, un template ne peut pas contenir un autre : c'est l'origine de l'erreur.

    Ensuite, je ne comprends pas vraiment ta logique. Que veux tu faire ?

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Je pense que j'ai compris ce que tu veux faire, essaie ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:template name="decoupe">
     <xsl:param name="str">
     <fo:block>
      <xsl:value-of select="substring($str,1,100)"/>
     </fo:block>
     <xsl:if test="string-length($str) &gt; 100">
       <xsl:call-template name="decoupe">
         <xsl:with-params name="str" select="substring($str,101)"/>
       </xsl:call-template>
     </xsl:if>
    </xsl:template>
    et dans ton template, tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       <xsl:call-template name="decoupe">
         <xsl:with-params name="str" select="."/>
       </xsl:call-template>

Discussions similaires

  1. [XSLT] PB: Boucle (for-each) et variable
    Par luchoo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/11/2010, 13h58
  2. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  3. [Entities] boucle for javascript dans un xslt
    Par loic_86 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 28/03/2007, 13h08
  4. [XSLT]Boucle for each
    Par jaq dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/12/2006, 12h40
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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