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 :

for-each et traitement alternatif en fonction de la position


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut for-each et traitement alternatif en fonction de la position
    Bonjour;
    Pour un "améliorer" la lisibilité d'affichage d'une serie dans un tableau je souhaite mettre deux couleurs alternées.

    en php on peut utiliser classiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($position%2 == 0) {   }
    je cherche à faire la même chose avec une feuille xslt :

    j'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:for-each select="noeud/noeud-item">
     
    	<xsl:if test="position() %2 !=0">   
    	    <tr class="class2">
    		<td><xsl:value-of select="@Name"/></td>
    	    </tr>
    	</xsl:if>
    	<xsl:if test="position() %2 !=1"> 
    	       <tr class="class1">	
    		 <td><xsl:value-of select="@Name"/></td>
    	</tr>
    	</xsl:if>		
    </xsl:for-each>
    helas , le % n'est pas correct ... Ya t'il un equivalent ?

    merci d'avance

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

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

    oui, il s'agit de l'opérateur mod :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:for-each select="noeud/noeud-item"> 
      <tr>
        <xsl:attribute name="class">
          <xsl:choose>
            <xsl:when test="position() mod 2 != 0">class1</xsl:when>
            <xsl:otherwise>class2</xsl:otherwise>
          </xsl:choose>
        </xsl:attribute>
        <td><xsl:value-of select="@Name"/></td> 
      </tr>
    </xsl:for-each>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    Désolé, je l'avais au bout des doigts, mais il y avait blocage. on peut tester le reste d'un division par deux par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="position() [b]mod[/b] 2 !=0">
    il semble que si une balise html est ouverte elle doit être fermée avant la fin du test donc , pour ce qui me concerne je ne peux me contenter d'ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:for-each select="noeud/noeud-item">
     
    <xsl:if test="position() mod 2 !=0">   
          <tr class="class2">
     </xsl:if>
     <xsl:if test="position() mod 2 !=1">  
       <tr class="class1">
     </xsl:if> 
     
          <td><xsl:value-of select="@Name"/></td>
       </tr>
     
    </xsl:for-each>

    mais je suis obliger de tout retaper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:for-each select="noeud/noeud-item">
     
       <xsl:if test="position() mod 2 !=0">   
           <tr class="class2">
          <td><xsl:value-of select="@Name"/></td>
           </tr>
       </xsl:if>
       <xsl:if test="position() mod 2 !=1">
              <tr class="class1">   
           <td><xsl:value-of select="@Name"/></td>
       </tr>
       </xsl:if>      
    </xsl:for-each>
    sauf s'il reste une erreur que je n'ai pas vu ...

    merci grandfather, le temps que je me reponde, tu es intervenu. un petit commentaire sur ma derniere remarque?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par Bernard Grosdoy
    merci grandfather, le temps que je me reponde, tu es intervenu. un petit commentaire sur ma derniere remarque?
    Oui, il suffit de consulter le bout de code que j'ai posté : en combinant un <xsl:attribute> et un <xsl:choose>, tu résouds ton problème...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

Discussions similaires

  1. [XL-2007] Fonction IsNumeric et For Each _In _Next
    Par souad12 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/08/2011, 11h01
  2. [XSLT 1.0] XSLT: utilisation de la fonction position() dans <for-each> imbriqués
    Par bernidupont dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2011, 21h33
  3. Sens de traitement For Each
    Par chriscamp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/03/2009, 10h30
  4. fonction for each key .......
    Par trialrofr dans le forum ASP
    Réponses: 13
    Dernier message: 10/01/2005, 14h29
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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