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 :

répéter une tâche - repeat [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut répéter une tâche - repeat
    Je souhaiterai répéter une tâche, mais je ne sais pas comment l'écrire.

    Voici un code que j'ai écrit :
    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
    36
    37
    38
    39
    40
    <xsl:template name="auteur">
      	<xsl:text>
        </xsl:text>
    		<xsl:comment>descriptions des auteurs</xsl:comment><xsl:text>
        </xsl:text>
        <authorDescriptions>
          <xsl:if test="key('fields', 'cu_fullname1') != ''">
        		<authorDescription>
        		  <!-- alias de l'auteur-->
              <xsl:attribute name="name"><xsl:value-of select="key('fields', 'cu_alias1')"/></xsl:attribute>
     
        			<!-- Nom complet de l'auteur -->
              <fullname><xsl:value-of select="key('fields', 'cu_fullname1')"/></fullname>
     
              <!-- Profil de l'auteur -->
              <xsl:if test="key('fields', 'cu_url1') != ''">
        			 <url><xsl:value-of select="key('fields', 'cu_url1')"/></url>
              </xsl:if>
     
              <!-- Site web de l'auteur -->
              <xsl:if test="key('fields', 'cu_homepageurl1') != ''">
        			 <homepage>
                <!-- Titre site web -->
                <xsl:if test="key('fields', 'cu_homepagetitle1') != ''">
          			 <title><xsl:value-of select="key('fields', 'cu_homepagetitle1')"/></title>
                </xsl:if>
                <!-- URL site web -->
                <url><xsl:value-of select="key('fields', 'cu_homepageurl1')"/></url>
               </homepage>
              </xsl:if>
     
              <!-- blog de l'auteur -->
              <xsl:if test="key('fields', 'cu_blog1') != ''">
        			 <blog><xsl:value-of select="key('fields', 'cu_blog1')"/></blog>
              </xsl:if>
     
            </authorDescription>
          </xsl:if>
        </authorDescriptions>
    	</xsl:template>
    Je souhaite répéter le contenu de la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <authorDescriptions></authorDescriptions>
    10 fois par exemple.

    Donc au lieu de faire un copier/coller 10 fois en changer le 1 en 2, 3... 10, je suppose qu'il y a une façon plus propre d'écrire. J'ai vu que l'on pouvait le faire avec repeat. Pouvez-vous m'aider. En xslt 2.0 c'est plus simple mais bon, je bosse sous xslt 1.0


  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
    En XSLT 1.0, on fait cela avec un template nommé récursif ayant pour paramètres l'indice de boucle et l'indice limite.

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je ne vois pas comment l'écrire.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Normalement on aime pas donner des trucs tout faits, mais il faut reconnaître que ça se devine pas facilement.

    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
    <xsl:template name="repeatAuthorDesc">
      <!-- Nombre de répétitions voulues -->
      <xsl:param name="repeatNum"/>
     
      <!-- Condition de non-arrêt de la récursion -->
      <xsl:if test="$repeatNum > 0">
        <!-- Faire -->
        <authorDescriptions></authorDescriptions>
     
        <!-- Appeler la récursion suivante -->
        <xsl:call-template name="repeatAuthorDesc">
          <xsl:with-param name="repeatNum" select="$repeatNum - 1"/>
        </xsl:call-template>
      </xsl:if>
     
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je ne vois pas comment écrire. Voici ce que j'ai fait :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
      <xsl:template name="repeatAuthorDesc">
        <!-- Nombre de répétitions voulues -->
        <xsl:param name="repeatNum"/>
     
        <authorDescriptions>
        <!-- Condition de non-arrêt de la récursion -->
        <xsl:if test="$repeatNum > 0">
        		<authorDescription>
        		  <!-- alias de l'auteur-->
              <xsl:attribute name="name"><xsl:value-of select="key('fields', 'cu_alias$repeatNum')"/></xsl:attribute>
     
        			<!-- Nom complet de l'auteur -->
              <fullname><xsl:value-of select="key('fields', 'cu_fullname$repeatNum')"/></fullname>
     
              <!-- Profil de l'auteur -->
              <xsl:if test="key('fields', 'cu_url$repeatNum') != ''">
        			 <url><xsl:value-of select="key('fields', 'cu_url$repeatNum')"/></url>
              </xsl:if>
     
              <!-- Badge de l'auteur -->
              <xsl:if test="key('fields', 'cu_badge$repeatNum') != ''">
        			 <badge><xsl:value-of select="key('fields', 'cu_badge$repeatNum')"/></badge>
              </xsl:if>
     
              <!-- Site web de l'auteur -->
              <xsl:if test="key('fields', 'cu_homepageurl$repeatNum') != ''">
        			 <homepage>
                <!-- Titre site web -->
                <xsl:if test="key('fields', 'cu_homepagetitle$repeatNum') != ''">
          			 <title><xsl:value-of select="key('fields', 'cu_homepagetitle$repeatNum')"/></title>
                </xsl:if>
                <!-- URL site web -->
                <url><xsl:value-of select="key('fields', 'cu_homepageurl$repeatNum')"/></url>
               </homepage>
              </xsl:if>
     
              <!-- blog de l'auteur -->
              <xsl:if test="key('fields', 'cu_blog$repeatNum') != ''">
        			 <blog><xsl:value-of select="key('fields', 'cu_blog$repeatNum')"/></blog>
              </xsl:if>
     
            </authorDescription>
          </authorDescriptions>
     
          <!-- Appeler la récursion suivante -->
          <xsl:call-template name="repeatAuthorDesc">
            <xsl:with-param name="repeatNum" select="$repeatNum - 1"/>
          </xsl:call-template>
        </xsl:if>
     
      </xsl:template>
    sans succès !

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    #1 - Tu ne peux pas mettre <authorDescriptions> à l'intérieur de ton template récursif, sinon tu vas en avoir à chaque récursion... Tu dois sûrement connaître le principe de la récursivité, j'imagine ?

    #2 -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="key('fields', 'cu_alias$repeatNum')"/>
    On ne peut pas concaténer comme ça en xPath. La seule solution est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    concat('cu_alias', $repeatNum)
    En fait dans le cas présent il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <authorDescription
      name="{key('fields', concat('cu_alias', $repeatNum))}">
     
    ...
     
    </authorDescription>
    ou toute autre chose qui dispense de <xsl:attribute>, un peu lourdingue.

    Ce sont les deux seuls vrais problèmes que je vois.
    Ah, personnellement j'aime pas trop qu'on me dise "ça marche pas !" Je veux connaître le résultat, et après seulement j'envisagerai de copier/coller chez moi. Ayant un certain respect pour l'effort fourni, je peux être plus coulant, mais bon... Je fais la remarque quand même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Répéter une tâche récurrente
    Par Turvy dans le forum Android
    Réponses: 5
    Dernier message: 10/12/2014, 18h03
  2. Planifier une tâche
    Par maxnad dans le forum Langage
    Réponses: 4
    Dernier message: 24/10/2005, 18h01
  3. Effectuer une tâche à la fermeture de la fenêtre
    Par onipif dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/09/2005, 16h57
  4. Comment récupérer l'ID d'une tâche programmée avec AT ?
    Par langela94 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 11h01
  5. Ne pas répéter une image de fond
    Par valette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/01/2005, 21h49

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