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] increment


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut [xslt] increment
    Bonjour,


    Je cherche a faire ajouter le texte </tr><tr> tous les 3 elements...

    la dtd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!ELEMENT trombi (membre+)>
    <!ELEMENT membre (nom,image,promo,divers)>
    le xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE trombi SYSTEM "trombi.dtd">
    <?xml-stylesheet href="trombi.xsl" type="text/xsl"?>
    <trombi>
          <membre>
               <image>membre.jpg</image>
               <nom>Monsieur le membre</nom>
               <promo>annee du membre</promo>
          </membre>
    </trombi>
    la 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
    42
    43
    44
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <xsl:template match="/">
    <table style="margin-left: 35px;">
    <tr>
          <xsl:apply-templates select="//trombi">
            <xsl:sort select="guid"/>
          </xsl:apply-templates>
    </tr>
    </table>
        </xsl:template>
     
        <xsl:template match="trombi">
          <xsl:param name="i" select="1"/>
          <xsl:for-each select="membre">
    <td>
    <table style="width: 200px; text-align: center;">
       <tr>
        <td style="padding: 10px;">
          <img src="pages/membres/images/{image}" />
        </td>
       </tr>
       <tr>
        <td style="text-align: center;">
          <xsl:value-of select="nom" />
        </td>
       </tr>
       <tr>
        <td style="text-align: center; margin-top: 10px;">
          <xsl:value-of select="promo" />
        </td>
       </tr>
    </table>
    </td>
     
    <!--        <xsl:with-param name="i" select="$i + 1" /> -->
              <xsl:if test="$i &gt; 2">
                <!-- </tr><tr> -->
                <!-- <xsl:with-param name="i" select="1"/> -->
              </xsl:if> -->
          </xsl:for-each>
        </xsl:template>
     
    </xsl:stylesheet>

    J'ai mis en commentaires ce qui ne marchait pas...
    Si jamais quelqu'un voit la solution...

    Merci par avance
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Les param ne se modifie pas comme ca et ils ont un usage partcilier dans un template nommé

    Inspire toi plus simplement de ces codes
    http://www.developpez.net/forums/vie...239000&start=1

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Voila, j'ai fait comme cela.
    mais le hic est que le parametre ne semble pas pas varier...
    comment fais-tu pour modifier sa valeur a chaque tour de boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        <xsl:call-template name="fin_ligne">
          <xsl:with-param name="i" select="$i + 1"/>
        </xsl:call-template>
     
      </xsl:for-each>
    </xsl:template>
     
    <xsl:template name="fin_ligne">
      <xsl:param name="i"/>
      <xsl:if test="$i &gt;= 3">
        &lt;/tr&gt; &lt;tr&gt;
        <xsl:param name="i" select="1"/>
      </xsl:if>
    </xsl:template>
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    Salut,

    Il te faut utiliser position() (qui correspond au numéro de l'occurence dans l'élément répétitif). C'est un nombre qui va automatiquement s'incrémenter a chaque tour dans le for-each!

    ++

    Thierry

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    ton for-each est faux car tu ne l incrémente pas du tout
    tu écris
    <xsl:with-param name="i" select="$i + 1"/>
    ce qui veut certainement dire qu à tous els coups il vaudra ...2

    le mieu est effectivement d utiliser position()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:variable name="pos">
      <xsl:choose>
        <xsl:when test="position() mod 3 = 0">3</xsl:when>
        <xsl:otherwise><xsl:value-of select="position() mod 3"/></xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
     
    <xsl:call-template.... avec pos
    à priori (pas testé)
    ça devrait faire l affaire...

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <table style="margin-left: 35px;">
          <tr>
            <xsl:apply-templates select="//trombi">
              <xsl:sort select="guid"/>
            </xsl:apply-templates>
          </tr>
        </table>
      </xsl:template>
     
      <xsl:template match="trombi">
        <xsl:for-each select="membre">
          <td>
            <table style="width: 200px; text-align: center;">
              <tr>
                <td style="padding: 10px;">
                  <img src="pages/membres/images/{image}" />
                </td>
              </tr>
              <tr>
                <td style="text-align: center;">
                  <xsl:value-of select="nom" />
                </td>
              </tr>
              <tr>
                <td style="text-align: center; margin-top: 10px;">
                  <xsl:value-of select="promo" />
                </td>
              </tr>
            </table>
          </td>
     
          <xsl:variable name="pos">
            <xsl:choose>
              <xsl:when test="position() mod 3 = 0">3</xsl:when>
              <xsl:otherwise><xsl:value-of select="position() mod 3"/></xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
     
          <xsl:if test="$pos = 3">
            <tr/>
          </xsl:if>
     
        </xsl:for-each>
      </xsl:template>
     
    </xsl:stylesheet>
    Voila la version qui marche


    Merci a tous
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    mais oui bien sur

    sauf que deja

    et ne sont pas la meme chose .

    Regarde le lien que j'ai mis et les test sur les position qui y sont.
    Obligation d'utiliser un xsl:text
    Ensuite ta variable est inutile

  8. #8
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    mais oui bien sur
    Ben vu que ce qui s'affiche me convient... ça me va

    J'essaierais le xsl:text, ça risque de me servir pour continuer mon projet
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  9. #9
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Dans ce cas la tu t'es trompe dans la demande, mais la ton code cree des ligne vide a l'interieur d'une meme ligne et a la suite de ton texte
    ce qui est different que de fermer une ligne et d'ecrire des lignes vides a la suite.(ta demande originelle).

    Un conseil:As tu teste ton affichage sous different navigateurs, certains sont plus permissif que d'autres d ?

  10. #10
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Je vais essayer avec differents navigateurs... je ne l'avais qu'avec firefox et ie

    Sinon, je viens d'utiliser xsl:text, comme on me l'a conseille

    et la ca donne exactement ce qu'il me fallait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                <xsl:if test="position() mod 3 = 0">
                  <xsl:text disable-output-escaping="yes">
                    &lt;/tr&gt;&lt;tr&gt;
                  </xsl:text>
                </xsl:if>

    Merci a tous.
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

Discussions similaires

  1. [XSLT] Incrementer une variable
    Par cinou01 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/11/2010, 11h04
  2. [XSLT] Incrementation d'une virgule
    Par Sam 069 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/04/2007, 17h25
  3. [XSLT] comment incrementer un compteur
    Par sidi.elmoctar dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/05/2006, 10h49
  4. [XSLT] incrementer une variable
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 02/11/2005, 10h44
  5. [XSLT][Compteur]qui ne s'incremente pas
    Par fraoustin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/01/2005, 18h11

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