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] fonction récursive à N niveaux


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 48
    Points
    48
    Par défaut [XSLT] fonction récursive à N niveaux
    Bonjour à vous,

    disons que j'ai actuellment quelque chose qui fonctionne mais qui n'est pas propre du tout et surtout pas vraimentuniversel, je m'explique :
    Je contruit un menu à trois niveaux, cependant, comme vous pouvez le constater, mon code est toujours le même, j'aurai aimé savoir s'il était possible de créer une fonction récursive en lui passant des paramètres.
    Je pense que c'est possible. Surtout que l'intérêt finale est de pouvoir avoir N niveaux (N1, N2, N3, N4, N5, N6 ....) pour le menu (tant qu'il y a des enfants, je rappelle cette fonction récursive).

    Est ce que quelqu'un pourrait m'aider ...?

    Voici mon code XSL :

    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
    <xsl:for-each select="/ROOT/LISTE/N1">
       <img src="Nv1.jpg" />
       <xsl:element  name="a">
          <xsl:attribute name="HREF">#</xsl:attribute>
          <xsl:attribute name="nom">
              <xsl:value-of select="@L" />
          </xsl:attribute>
          <xsl:attribute name="onClick">
               affichageEnCours(<xsl:value-of select="@ID" />,this.nom);
          </xsl:attribute>
         <xsl:value-of select="@L"/>
       </xsl:element>
     
          <xsl:for-each select="./N2">
              <img src="Nv2.jpg" />
              <xsl:element  name="a">
                      <xsl:attribute name="HREF">#</xsl:attribute>
                      <xsl:attribute name="nom">
                        <xsl:value-of select="@L" />
                      </xsl:attribute>
                      <xsl:attribute name="onClick">
                         affichageEnCours(<xsl:value-of select="@ID" />,this.nom);
                      </xsl:attribute>
                   <xsl:value-of select="@L"/>
              </xsl:element>
     
                  <xsl:for-each select="./N3">
                       <img src="Nv3.jpg" />
                       <xsl:element  name="a">
                            <xsl:attribute name="HREF">#</xsl:attribute>
                            <xsl:attribute name="nom">
                                <xsl:value-of select="@L" />
                            </xsl:attribute>
                            <xsl:attribute name="onClick">
                                 affichageEnCours(<xsl:value-of select="@ID" />,this.nom);
                            </xsl:attribute>
                         <xsl:value-of select="@L"/>
                       </xsl:element>
                  </xsl:for-each>
          </xsl:for-each>
    </xsl:for-each>

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Ceci devrait faire l'affaire :

    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
    <xsl:call-template name="affiche-menu">
      <xsl:with-param name="noeuds" select="/ROOT/LISTE/N1"/>
    </xsl:call-template>
    ...
    <xsl:template name="affiche-menu">
      <xsl:param name="noeuds"/>
      <xsl:variable name="niveau" select="substring-after(name($noeuds), 'N')"/>
      <xsl:for-each select="$noeuds">
        <img src="Nv{$niveau}.jpg" /> 
        <xsl:element  name="a"> 
          <xsl:attribute name="HREF">#</xsl:attribute> 
          <xsl:attribute name="nom"> 
              <xsl:value-of select="@L" /> 
          </xsl:attribute> 
          <xsl:attribute name="onClick"> 
               affichageEnCours(<xsl:value-of select="@ID" />,this.nom); 
          </xsl:attribute> 
          <xsl:value-of select="@L"/> 
        </xsl:element> 
        <xsl:call-template name="affiche-menu">
          <xsl:with-param name="noeuds" select="*"/>
        </xsl:call-template>
      </xsl:for-each>
    </xsl:template>
    Je ne l'ai pas testée, mais le principe est là.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 48
    Points
    48
    Par défaut
    Je te remercie carrément, je vais le tester, au moins maintenant je pourrai avoir N niveaux.

    Merci encore

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/06/2008, 12h08
  2. [xslt] fonctions manipulations string
    Par gorgonite dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 23/01/2006, 09h46
  3. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  4. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12
  5. [XSLT] Fonction xslt_create indéfinie
    Par ripou dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/10/2005, 22h31

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