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 :

[XPath] Afficher données en colonnes avec bris


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 129
    Points : 93
    Points
    93
    Par défaut [XPath] Afficher données en colonnes avec bris
    Bonjour à tous,

    J'utilise une partie de la solution exposée dans le défi de septembre 2004 pour afficher les données de mon fichier xml en colonnes. Supposons que j'ai le fichier xml 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
    <fichiers>
    <fichier nom="fic1"/>
    <fichier nom="fic2"/>
    <fichier nom="fic3"/>
    <fichier nom="fic4"/>
    <fichier nom="fic5"/>
    <fichier nom="fic6"/>
    <fichier nom="fic7"/>
    <fichier nom="fic8"/>
    <fichier nom="fic9"/>
    <fichier nom="fic10"/>
    <fichier nom="fic11"/>
    </fichiers>
    
    J'applique la transformation suivante :

    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
    <xsl:template match="/"> 
    <html> 
     <body> 
      <table border="1"> 
       <xsl:for-each select="//fichier[position() mod ($M * $C) = 1]">
        <tr>
         <xsl:for-each select=".|following-sibling::fichier[position() mod $M = 0 and position() &lt; $M * $C]">
          <td>
           <xsl:for-each select=".|following-sibling::fichier[position() &lt; $M]">
            <xsl:value-of select="@nom"/><br/
           </xsl:for-each>
          </td>
         </xsl:for-each>
         <xsl:if test="position() = last()">
          <xsl:call-template name="cellules_vides">
           <xsl:with-param name="nb" select="$C - ceiling(count(.|following-sibling::fichier) div $M)"/>
          </xsl:call-template>
         </xsl:if>
        </tr>
       </xsl:for-each> 
    </table> 
     </body>
    </html> 
    </xsl:template> 
     
    <xsl:template name="cellules_vides">
     <xsl:param name="nb"/>
     <xsl:if test="$nb &gt;= 1">
       <td/>
        <xsl:call-template name="cellules_vides">
         <xsl:with-param name="nb" select="$nb - 1"/>
        </xsl:call-template>
      </xsl:if> 
    </xsl:template>
    J'aimerais pouvoir insérer un bris avant le 11e noeud, le 22e noeud, etc. et y insérer du texte afin d'obtenir quelque chose comme ça :

    fic1 fic2
    fic3 fic4
    ...
    fic9 fic10
    blabla
    fic11 fic12
    ...

    Merci à l'avance

    iDaaX

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 129
    Points : 93
    Points
    93
    Par défaut
    Bonjour à tous,

    J'ai trouvé la solution. Par exemple, pour insérer un bris (en fusionnant les cellules) pourchaque position pair :

    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
    <xsl:template match="/"> <html> <body> <table border="1"> <xsl:for-each select="//fichier[position() mod ($M * $C) = 1]"> <tr> <xsl:for-each select=".|following-sibling::fichier[position() mod $M = 0 and position() &lt; $M * $C]"> <td> <xsl:for-each select=".|following-sibling::fichier[position() &lt; $M]"> <xsl:value-of select="@nom"/><br/ </xsl:for-each> </td> </xsl:for-each> <xsl:if test="position() = last()"> <xsl:call-template name="cellules_vides"> <xsl:with-param name="nb" select="$C - ceiling(count(.|following-sibling::fichier) div $M)"/> </xsl:call-template> </xsl:if> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> <xsl:template name="cellules_vides"> <xsl:param name="nb"/> <xsl:if test="$nb &gt;= 1"> <td/> <xsl:call-template name="cellules_vides"> <xsl:with-param name="nb" select="$nb - 1"/> </xsl:call-template> </xsl:if> </xsl:template>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 129
    Points : 93
    Points
    93
    Par défaut
    Bonjour à tous,

    J'ai trouvé la solution. Par exemple, pour insérer un bris après toutes les position paire (en fusionnant les cellules) :

    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
    <xsl:template match="/"> <html> <body> <table border="1"> <xsl:for-each select="//fichier[position() mod ($M * $C) = 1]"> <tr> <xsl:for-each select=".|following-sibling::fichier[position() mod $M = 0 and position() &lt; $M * $C]"> <td> <xsl:for-each select=".|following-sibling::fichier[position() &lt; $M]"> <xsl:value-of select="@nom"/><br/ </xsl:for-each> </td> </xsl:for-each> <xsl:if test="position() mod 2 = 0 and position() != last()"> <tr> <td colspan="2"> <xsl:text>Allo</xsl:text> </td> </tr> </xsl:if> <xsl:if test="position() = last()"> <xsl:call-template name="cellules_vides"> <xsl:with-param name="nb" select="$C - ceiling(count(.|following-sibling::fichier) div $M)"/> </xsl:call-template> </xsl:if> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> <xsl:template name="cellules_vides"> <xsl:param name="nb"/> <xsl:if test="$nb &gt;= 1"> <td/> <xsl:call-template name="cellules_vides"> <xsl:with-param name="nb" select="$nb - 1"/> </xsl:call-template> </xsl:if> </xsl:template>
    Ce qui donne :

    fic1 fic2
    blabla
    fic3 fic4
    blabla
    fic5 fic6
    ...

    Voilà !

    iDaaX

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

Discussions similaires

  1. [COM] Mettre les données en colonne
    Par kaking dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/12/2009, 09h31
  2. [MySQL] Afficher données Mysql avec PHP
    Par Tablaturing dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 19/10/2007, 09h46
  3. [PDO] afficher mes données par colonnes dynamiquement
    Par mariafan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/07/2007, 09h52
  4. Réponses: 3
    Dernier message: 20/07/2007, 11h33
  5. Réponses: 1
    Dernier message: 10/06/2007, 07h22

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