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 :

boucle pour un tableau


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut boucle pour un tableau
    Bonjour à tous ...

    vous allez me dire "il y a plein de réponse à ce sujet" ... oui, mais j'en ai comprise aucune ...

    donc je reprend à la base ...

    j'ai un xml :

    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
     
    <root>
    <Tresult nblevel='3'>
    	<level>bas</level>
    	<level>Moyen</level>
    	<level>haut</level>
    	<group name='truc'>
    		<elem niv="2">elem1</elem>
    		<elem niv="3">elem2</elem>
    	</group>
    	<group name='machin'>
    		<elem niv="3">elem3</elem>
    		<elem niv="1">elem4</elem>
    	</group>
    </Tresult>
    </root>
    et un 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
     
    <xsl:stylesheet>
    <xsl:template match="Tresult">
    <table>
    	<tr>
    		<th>name</th>
    		<xsl:for-each select="level">
    			<th><xsl:value-of select="."/></th>
    		</xsl:for-each>
    	</tr>
    	<xsl:for-each select="group">
    		<tr><td colspan='{../@nblevel + 1}'><xsl:value-of select="@name"/></td></tr>
    		<xsl:for-each select="elem">
    		<tr>
    			<td><xsl:value-of select="."/></td>
    			<!-- En attente de mieux -->
                            <td></td>
    			<td>X</td>
    			<td></td> 
    		</tr>
    		</xsl:for-each>
    	</xsl:for-each>
    </table>
    </xsl:template>
    </xsl:stylesheet>
    pour le moment, le seul élément qui n'est pas gérer c'est le "niveau" de l’élément ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <elem niv="3">elem2</elem>
    qui doit correspondre à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <td>elem2</td> + ( <td></td> ) * 2  + <td>X</td>
    mais je ne sais pas comment le gérer ( sachant que le "niv" est limité à 3 par la déclaration "nblevel" du tableau )

    quelqu'un à une idée ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    On ne va pas deviner la logique de la chose si tu ne l'expliques pas...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    bah .. en php je ferais 'simplement' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for($i = 0 ; $i < $nblevel ; $i ++ )
    {
     print '<td>';
     if( $i == $niv ) { print 'X'; } 
     print '</td>';
    }
    mais je sais bien que le XSL ne fonctionne pas comme ça ...

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Faut passer par un template récursif pour ça.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    Ahhh .... ok .. cool ...

    mais encore ?

    faire un code 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
     
    <xsl:template name="InTd">
      <xsl:param name="current" select="1"/>
      <xsl:param name="max" select="1"/>
      <xsl:param name="level" select="1"/>
     
      <xsl:choose>
     
        <xsl:when test="$level = $nblevel">
        <td>X</td>
        </xsl:when>
     
        <xsl:when test="$current &lt; $max">
    	<td></td>
            <xsl:call-template name="InTd">
              <xsl:with-param name="max" select="$max"/>
    		  <xsl:with-param name="current" select="$current + 1"/>
              <xsl:with-param name="level" select="$level"/>
            </xsl:call-template>
        </xsl:when>
     
      </xsl:choose>
    </xsl:template>
    et mon xsl devient
    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:template match="Tresult">
    <table>
    	<tr>
    		<th>name</th>
    		<xsl:for-each select="level">
    			<th><xsl:value-of select="."/></th>
    		</xsl:for-each>
    	</tr>
    	<xsl:for-each select="group">
    		<tr><td colspan='{../@nblevel + 1}'><xsl:value-of select="@name"/></td></tr>
    		<xsl:for-each select="elem">
    		<tr>
    			<td><xsl:value-of select="."/></td>
    			 <xsl:call-template name="InTd">
    				<xsl:with-param name="max" select="../@nblevel"/>
    				<xsl:with-param name="current" select="1"/>
    				<xsl:with-param name="level" select="@niv"/>
    			 </xsl:call-template>
    		</tr>
    		</xsl:for-each>
    	</xsl:for-each>
    </table>
    </xsl:template>
    ... ça me pose une erreur : " Une erreur inconnue s'est produite (). " ....

    Je sais pas si c'est l'appel de mon template qui est mauvais, ou ma récursion ...

  6. #6
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Ta variable $nblevel n'est pas définie.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2009, 10h05
  2. Comment réaliser une boucle pour remplir un tableau
    Par LVChatel dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/04/2009, 11h20
  3. Boucles pour récuperer les données d'un tableau dans un autre.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/09/2007, 21h39
  4. Réponses: 3
    Dernier message: 11/01/2006, 17h44
  5. boucle for n fois pour n tableau...
    Par toyyo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/08/2005, 16h01

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