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 :

Exploration du prochain noeud de navigation [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut Exploration du prochain noeud de navigation
    Bonjour,

    J'ai une liste de produits classés par catégories que je souhaite afficher dans un tableau à deux colonnes.
    Chaque cellule de mon tableau comporte un titre de catégorie, suivi de plusieurs checkboxs (autant de checkboxs que de produits dans la catégorie).

    Mon flux XML est le suivant:
    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
    <Hierarchy>	
    	<Label>Mon label de top hierarchie 1</label>
    	<Children>
    		<Hierarchy>
    			<Label>Mon label de hierarchie 1</label>
    			<Children>
    				<Hierarchy>
    					<Label>Mon label de produit 1-1</label>
    				</Hierarchy>
    				<Hierarchy>
    					<Label>Mon label de produit 1-2</label>
    				</Hierarchy>
    			</Children>
    		</Hierarchy>
    		<Hierarchy>
    			<Label>Mon label de hierarchie 2</label>
    			<Children>
    				<Hierarchy>
    					<Label>Mon label de produit 2-1</label>
    				</Hierarchy>
    				<Hierarchy>
    					<Label>Mon label de produit 2-2</label>
    				</Hierarchy>
    			</Children>
    		</Hierarchy>
    	</Children>
    </Hierarchy>
    Mon code XSLT est le suivant:

    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
    <xsl:variable name="contenuRayon" select="Children/Hierarchy"/>
    <xsl:for-each select ="$contenuRayon">
      <xsl:if test="position() mod 2 = 1">
        <tr>
         <td>
           <div class="list-produit"><h3><xsl:value-of select="Label"/></h3>
           <!-- Gestion des checkboxs de la première colonne -->
           <xsl:variable name="listeProduits" select="Children/Hierarchy"/>
           <xsl:for-each select="$listeProduits">
    	  <xsl:variable name="id" select="concat('-',Id)"/>
    		 <div><input name="{Id}" id="{concat($positionRayon,$id)}" type="checkbox" /><label for="{concat($positionRayon,$id)}"><xsl:value-of select="Label"/></label></div>
    	</xsl:for-each>
    	</div>
          </td>
          <td>
           <div class="list-produit"><h3><xsl:value-of select="following-sibling::Hierarchy/Label"/></h3>
           <!-- Gestion des checkboxs de la deuxième colonne -->
    	  <xsl:variable name="listeProduits2" select="$listeProduits/following-sibling::Hierarchy[1]"/>
    	  --<xsl:value-of select="count($listeProduits2)"/>
    	  <xsl:for-each select="$listeProduits2">
    		 <xsl:variable name="id" select="concat('-',Id)"/>
    			 <div><input name="{Id}" id="{concat($positionRayon,$id)}" type="checkbox" /><label for="{concat($positionRayon,$id)}"><xsl:value-of select="Label"/></label></div>
    	  </xsl:for-each>
    	 </div>
         </td> 
        </tr>
      </xsl:if>
    </xsl:for-each>
    Le code ci-dessus permet dans un premier temps en se basant sur la fonction modulo de savoir si je suis dans la première cellule de mon tableau (pour pouvoir limiter le nombre de cellules à deux sur ma ligne). Je remplis ma première cellule puis j'essaye d'atteindre le noeud frère suivant, et lorsque je boucle dessus, je récupére des produits de la catégorie précédente voir des catégories suivantes et je n'obtiens pas le résultat souhaité.

    Avez-vous une idée d'où peut venir le problème ?

    Merci par avance pour votre aide,

    Thibault

  2. #2
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    J'ai modifié mon code d'extraction des données pour la deuxième colonne comme suit et ça fonctionne:

    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
    <xsl:variable name="contenuRayon" select="Children/Hierarchy"/>
    <xsl:for-each select ="$contenuRayon">
      <xsl:if test="position() mod 2 = 1">
        <tr>
         <td>
           <div class="list-produit"><h3><xsl:value-of select="Label"/></h3>
           <!-- Gestion des checkboxs de la première colonne -->
           <xsl:variable name="listeProduits" select="Children/Hierarchy"/>
           <xsl:for-each select="$listeProduits">
    	  <xsl:variable name="id" select="concat('-',Id)"/>
    		 <div><input name="{Id}" id="{concat($positionRayon,$id)}" type="checkbox" /><label for="{concat($positionRayon,$id)}"><xsl:value-of select="Label"/></label></div>
    	</xsl:for-each>
    	</div>
          </td>
          <td>
           <div class="list-produit"><h3><xsl:value-of select="following-sibling::Hierarchy/Label"/></h3>
    		 <!-- Gestion des checkboxs de la deuxième colonne -->
    	     <xsl:variable name="listeProduits2" select="following-sibling::Hierarchy[1]/Children/Hierarchy"/>
    	     <xsl:for-each select="$listeProduits2">
     
    		 <xsl:variable name="id" select="concat('-',Id)"/>
    		<div><input name="{Id}" id="{concat($positionRayon,$id)}" type="checkbox" /><label for="{concat($positionRayon,$id)}"><xsl:value-of select="Label"/></label></div>
    	</xsl:for-each>
    </div>
         </td> 
        </tr>
      </xsl:if>
    </xsl:for-each>

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

Discussions similaires

  1. [XSLT 1.0] Recherche du noeud precedent le prochain
    Par aupawi dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 30/08/2012, 14h21
  2. Réponses: 4
    Dernier message: 13/12/2011, 15h58
  3. comment creer un noeud dans l'explorer
    Par jlandrei dans le forum Windows
    Réponses: 7
    Dernier message: 04/04/2010, 14h32

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