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 :

[XSL-FO] Tableau avec 2 colonnes


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut [XSL-FO] Tableau avec 2 colonnes
    Bonjour,

    J'ai un fichier XML qui ressemble à cela

    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
     
    <MOIS mois=1>
       <NOM>Toto</NOM>
       <NOM>Titi</NOM>
       <NOM>Tutu</NOM>
    </MOIS>
    <MOIS mois=2>
       <NOM>Lolo</NOM>
       <NOM>Lili</NOM>
    </MOIS>
    <MOIS mois=3>
       <NOM>Blop</NOM>
    </MOIS>
    <MOIS mois=4>
       <NOM>Zaza</NOM>
       <NOM>Zuzu</NOM>
       <NOM>Zozo</NOM>
    </MOIS>
    Par la suite, ce code me permet de créer un fichier PDF.
    Ce que je voudrai faire, c'est afficher un tableau sur 2 colonnes :
    1 | 2
    -----
    3 | 4
    J'ai essayé de créer un fichier en XSL-FO mais je n'arrive pas à créer 2 colonnes...

    Merci pour votre aide.

    TONY

  2. #2
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    tu peux nous faire voir ton code ?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Voici mon code :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    				xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
     
    <xsl:template match="/">
    	<fo:root>
    		<fo:layout-master-set>
    		<xsl:choose>
    			<xsl:when test="fo:page-number=1">	
    				<fo:simple-page-master master-name="first"
    	                           page-height="29,7cm"
    	                           page-width="21cm"
    	                           margin-top="1cm"
    	                           margin-bottom="0.7cm"
    	                           margin-left="0.5cm"
    	                           margin-right="0.5cm">
    					<fo:region-body margin-top="2.5cm"/>
    					<fo:region-before extent="3cm"/>
    					<fo:region-after extent="1cm"/>
    				</fo:simple-page-master>
    				</xsl:when>
    				<xsl:otherwise>
    					<fo:simple-page-master master-name="first"
    		                           page-height="29,7cm"
    		                           page-width="21cm"
    		                           margin-top="1cm"
    		                           margin-bottom="0.7cm"
    		                           margin-left="0.5cm"
    		                           margin-right="0.5cm">
    						<fo:region-body margin-top="2.5cm" margin-bottom="1cm"/>
    						<fo:region-before extent="3cm"/>
    						<fo:region-after extent="1cm"/>
    					</fo:simple-page-master>
    				</xsl:otherwise>
    			</xsl:choose>
    		</fo:layout-master-set>
     
    		<fo:page-sequence master-reference="first">
     
    		    <fo:static-content flow-name="xsl-region-before">
    				<fo:block>
    					<fo:external-graphic src="http://mflimpression.mutualite-loire.com/images/Logopetit.bmp" width="2cm"/>
    				</fo:block>
    				<fo:block text-align="center" 
    								font-weight="bold"
    								font-variant="small-caps"
    								font-size="14pt">Gardes Administratives du Long et Moyen Séjour</fo:block>
    				<fo:block text-align="center"></fo:block>
    			</fo:static-content>
     
     
    			  <fo:static-content flow-name="xsl-region-after">
    			  <fo:block font="6pt Verdana"  border="0.5px solid black"></fo:block>
      <fo:block font="4pt Verdana" color="white">a</fo:block>
    		<fo:block text-align="center" 
    								font-weight="bold"
    								font-variant="small-caps"
    								font-size="8pt">Dernière mise à jour : <xsl:value-of select="XMLGARDE/MISEAJOUR"/></fo:block>
    			</fo:static-content>
     
    			<fo:flow flow-name="xsl-region-body">
     
    				<fo:block  text-align="center">
    					<xsl:apply-templates select="XMLGARDE/MOISGARDE"/>
    				</fo:block>
    			</fo:flow>
    		</fo:page-sequence>
    	</fo:root>
    </xsl:template>
     
     
    <xsl:template match="XMLGARDE/MOISGARDE">
    	<fo:table border-collapse="separate" width="100%" table-layout="fixed">
     
    		<fo:table-column column-width="60px"></fo:table-column> 
    		<fo:table-column column-width="60px"></fo:table-column> 
    		<fo:table-column column-width="100px"></fo:table-column> 
     
    		<fo:table-body text-align="center" font-size="6pt" display-align="center" border-left="1px solid black" border-right="1px solid black" border-bottom="1px solid black">		
    			<xsl:apply-templates select="GESTIONGARDE"/>
    		</fo:table-body>
     
    	</fo:table>
    </xsl:template>
     
     
    <xsl:template match="GESTIONGARDE">
     
    	<fo:table-row text-align="center" height="10px" >
    		<fo:table-cell>
    			<fo:block>
    				<xsl:value-of select="DATEDEBUTGARDE"/>
    			</fo:block>
    		</fo:table-cell>
    		<fo:table-cell>
    			<fo:block>
    				<xsl:value-of select="DATEFINGARDE"/>
    			</fo:block>
    		</fo:table-cell>
    		<fo:table-cell>
    			<fo:block>
    				<xsl:value-of select="PERSONNEGARDE"/>
    			</fo:block>
    		</fo:table-cell>
    	</fo:table-row>
     
    </xsl:template>
     
     
    </xsl:stylesheet>
    Ca me renvoi un tableau avec une colonne, hors j'en voudrai 2.
    Je pensais faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:apply-templates select="GESTIONGARDE"/>
    <xsl:apply-templates select="suivant de GESTIONGARDE"/>
    mais ca marche pas et je sais pas la fonction à utiliser...

  4. #4
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    le tableau créer par gestionGarde a 1 seule colonne ???
    il devrait en avoir 3 non ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    En fait, j'ai un grand tableau contenant un tableau avec 3 colonnes.
    Pour chaque mois, je retourne 3 éléments d'une liste de données

    Pour l'instant j'ai ça :

    ---------------
    |.....Mois 1.....|
    | 1a | 1b | 1c |
    ---------------
    |.....Mois 2.....|
    | 2a | 2b | 2c |
    ---------------
    |.....Mois 3.....|
    | 3a | 3b | 3c |
    ---------------
    |.....Mois 4.....|
    | 4a | 4b | 4c |
    ---------------

    et je voudrai :

    ------------------------------
    |.....Mois 1.....||.....Mois 2.....|
    | 1a | 1b | 1c || 2a | 2b | 2c |
    ------------------------------
    |.....Mois 3.....||.....Mois 4.....|
    | 3a | 3b | 3c || 4a | 4b | 4c |
    ------------------------------

  6. #6
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    c'est normal vu ton code

    essaye de faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <fo:table-body text-align="center" font-size="6pt" display-align="center" border-left="1px solid black" border-right="1px solid black" border-bottom="1px solid black">		
    			<xsl:apply-templates select="GESTIONGARDE"/>
    !!!!!!!!!!!!!!!!!!!!!!!!!!fais une colonne !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    <xsl:apply-templates select="GESTIONGARDE"/>
    		</fo:table-body>

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    J'avais deja essaye de faire cela.
    Le problème c'est que ca me renvoi 2 fois les lignes l'une en dessous de l'autre, hors il me faudrai les lignes l'une a coté de l'autre et que ce soit le mois suivant.

  8. #8
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    je vois pas trop ou est la difficulté, il te faut une boucle du style

    ligne
    apply GESTIONGARDE
    colonne
    apply GESTIONGARDE
    ligne

    si tu n y arrive pas comme ca : modifie ton gestionGarde ....

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Pour afficher le tableau avec les 2 colonnes, j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <fo:table>
    					<fo:table-column column-width="300px"></fo:table-column>
    					<fo:table-column column-width="300px"></fo:table-column>
    					<fo:table-body>		
    					<fo:table-row>
    					<fo:table-cell>
    						<xsl:apply-templates select="XMLGARDE/MOISGARDE"/>
    					</fo:table-cell>
    					<fo:table-cell>
    						<xsl:apply-templates select="XMLGARDE/MOISGARDE"/>
    					</fo:table-cell>
    					</fo:table-row>		
    					</fo:table-body>
    					</fo:table>
    Par contre, et ce qui est normal avec ce code, j'ai le meme mois dans la colonne gauche et droite.
    Est ce qu'il y a une fonction (et si oui comment l'utiliser) permettant de mettre un mois et son mois suivant ? J'ai trouvé following et following-sibling mais je n'arrive pas a le faire fonctionner...

  10. #10
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    tu peux peut etre utiliser la fonction position() qui te donne la position d une balise dans la " meme suite de balise "


    sinon lors de ton 2ond appel :
    <xsl:apply-templates select="XMLGARDE/MOISGARDE"/>

    tu fais : mois+1


  11. #11
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    J'étais justement en train de regarder avec position(), merci.
    Si je met
    <xsl:apply-templates select="XMLGARDE/MOISGARDE[position()]"/>
    , ça me renvoi le même mois, mais si je met
    <xsl:apply-templates select="XMLGARDE/MOISGARDE[1+position()]"/>, ca ne marche pas (ca n'affiche rien).

  12. #12
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    non la je pense que tu fais n importe quoi

    position c'est un valeur tu t en sert pour afficher le numero du mois donc tu fais :
    <xsl:apply-templates select="XMLGARDE/MOISGARDE"/>

    et en valeur du mois tu mets :
    (syntaxe fausse )

    <xsl:valueof select="position()">

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Ca y est ca marche ...
    J'ai fait <xsl:apply-templates select="XMLGARDE/MOISGARDE[position()>1]"/>
    et ca me retourne ce qu'il me faut.

    Merci laurentibus

  14. #14
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    hmmmmmm
    en fait la tu prends toutes les MOISGARDE sauf la premiere
    alors je sais pas si c'est cela que tu voulais ... je penses pas

    mais bon si tu es sur que cela marche dans 100% de tes cas ... alors on dira que c'est exactement ce que tu voulais faire

    ++

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

Discussions similaires

  1. affichage d'un tableau avec des colonnes fixes
    Par jbaudens dans le forum C
    Réponses: 3
    Dernier message: 28/10/2007, 19h31
  2. Un tableau avec des colonnes dynamiques
    Par Cronycs dans le forum Struts 1
    Réponses: 5
    Dernier message: 07/06/2007, 13h38
  3. [XSL-FO] Tableau avec bouts arrondis + Utilisation FOP
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/05/2007, 09h24
  4. [CSS] Remplacer un tableau avec des colonnes
    Par mullger dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 22/08/2006, 15h30
  5. tableau avec 1 colonne sur 3 sans cadre
    Par brasco06 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 21/04/2005, 17h44

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