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 :

Mise en Forme en tableau XSL


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Par défaut Mise en Forme en tableau XSL
    Bonjour à tous et à toutes,

    J'aimerai extraire et mettre en forme les données du doc 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
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="discographie2.xsl"?>
    <discography>
        <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
        <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
        <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
        <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
        <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
         <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
         <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
         <album>
    	<link><link.html>
    	<image>alex.jpg</image>
            <title>Piton Mi Le</title>
            <description>Nouvel Album</description>
    	<date>2006</date>
         </album>
     
        </discography>
    En sortie, j'aimerai avoir un tableau sur 3 colonnes et autant de lignes nécessaires.
    J'ai fait une mise en forme en xslt mais je n'arrive pas à revenir à la ligne. En effet, mon tableau fait 1 ligne infinie en largeur. Or, il faudrait qu'il créé une ligne tous les 3 albums. De plus, il y'a un tri qui s'opère, de façon à ce que les données les plus récentes s'affichent en premières.

    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/">
      <html>
      <body>
      <table border="1">
        <xsl:for-each select="discography/ligne/album">
          <xsl:sort select="date" order="descending"/>
          <td>
     
            <tr>
    		<xsl:element name="a">
    		<xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
    		<img><xsl:attribute name="src">
    		<xsl:value-of select="image"/>
    		</xsl:attribute></img> 
    		</xsl:element>
    		</tr>
            <tr><small><center><xsl:value-of select="title"/></center></small></tr>
    		<tr><small><center><xsl:value-of select="description"/></center></small></tr>
          </td>
     
        </xsl:for-each>
      </table>
      </body>
      </html>
    </xsl:template>
    </xsl:stylesheet>
    Avez-vous une idée sur la question ?

    Merci beaucoup d'avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Le fait que tu aies besoin de trier dans l'ordre d'une part, et de séparer en groupes de 3 d'autre part, rend les choses extrêmement difficiles en XSLT vanilla. La seule solution serait d'implémenter toi-même le tri des données dans un template récursif, en passant à chaque fois l'état du calcul et quelle est la position de la prochaine cellule de tableau.
    Très chiant.

    Si tu peux utiliser EXSLT*ou XSLT 2.0, par contre, c'est plus facile.

    - EXSLT permettrait de mettre les données triées dans une variable, puis de transformer le résultat en un node-set() qu'on pourrait découper en groupes de 3.

    - XSLT 2.0 permet directement d'ordonner les séquences en une nouvelle séquence, ainsi que de les découper en groupes. Là c'est carrément trivial.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tiens en fait, c'est compliqué, mais beaucoup moins que je le pensais. Je pensais que <xsl:sort> faisait n'importe quoi avec position(), mais je le pensais à tort.

    Voici un exemple de traitement similaire :

    fichier de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <a>
     <b>7</b>
     <b>2</b>
     <b>5</b>
     <b>9</b>
     <b>1</b>
     <b>8</b>
     <b>4</b>
    </a>
    Nous voulons trier et éclater en groupes de 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <table>
      <tr>
        <td>1</td><td>2</td><td>4</td>
      </tr>
      <tr>
        <td>5</td><td>7</td><td>8</td>
      </tr>
      <tr>
        <td>9</td>
      </tr>
    </table>
    Voici comment :

    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:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:template match="/">
        <table>
        <!-- Faire un <tr> pour chaque groupe de 3 -->
        <xsl:for-each select="(//b)[position() mod 3 = 1]">
          <!-- $i indique la position du groupe, de zéro à dernier groupe -->
          <xsl:variable name="i" select="position()-1"/>
          <tr>
            <!-- Nous parcourons à nouveau tout, mais cette fois nous classons -->
            <xsl:for-each select="//b">
              <xsl:sort select="." order="ascending" data-type="number"/>
              <!-- Nous n'affichons que ce qui doit faire partie du groupe en cours -->
              <xsl:if test="position()-1 >= 3*$i and 3*$i+ 3 > position() - 1">
                <td><xsl:value-of select="."/></td>
              </xsl:if>
            </xsl:for-each>
          </tr>
        </xsl:for-each>
        </table>
      </xsl:template>
     
    </xsl:stylesheet>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [PEAR][Datagrid]Mise en forme contenu tableau HTML
    Par goldkey dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/09/2010, 09h35
  2. Réponses: 0
    Dernier message: 24/06/2009, 15h08
  3. Mise en forme en tableau d'un Zend Form
    Par ZIED dans le forum Zend_Form
    Réponses: 1
    Dernier message: 20/06/2008, 23h29
  4. Mise en forme conditionnelle tableau croisé
    Par cocorules dans le forum Cognos
    Réponses: 0
    Dernier message: 16/05/2008, 16h16
  5. [MySQL] Mise en forme de tableau automatique
    Par Misoss dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 02/02/2008, 10h38

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