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] passer sur le tableau suivant apres X lectures


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut [XSL] passer sur le tableau suivant apres X lectures
    Bonjour à tous j'ai dans mon xml plusieurs etudiants comme ceci

    <ETUDIANT>
    <ID> 1 </ID>
    <PRENOM> José </PRENOM>
    </ETUDIANT>
    .
    .
    .
    .
    <ETUDIANT>
    <ID> 10 </ID>
    <PRENOM> tzt </PRENOM>
    </ETUDIANT>

    Je voudrais les imprimer comme le tableau ci dessous
    je voudrais ecrire les 7 premiers etudiants dans la 1er collone et ensuite passer a la deuxieme pour finir d'ecrire mes etudiants
    Je sais pas si c'est possible en tout ca je peine un peu a trouver la solution
    Merci de votre aide

    ID.........Prenom.........ID........Prenom
    1.........Jose..............8......... denis
    2.........zer................9......... zeata
    3.........zerzer...........10......... tzt
    4.........zar
    5.........zra
    6.........tzetzat
    7.........zetzat

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    Salut,

    Il suffit que tu lui dises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:variable name="etudiant">
    <xsl:value-of select="count(ETUDIANT)"/>
    </xsl:variable>
     
    <xsl:if test="$etudiant mod 7 &lt; 0">
    instructions dans la première colonne
    </xsl:if>
    <xsl:if test="$etudiant mod 7 = 0">
    instructions dans la deuxième colonne
    </xsl:if>
    Tu vas effectuer un test pour compter le nombre de balises étudiant que tu as et une fois que tu en as 7, tu passes à la colonne suivante.

    Bon courage

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Merci pour la réponse mais une fois que j'ai ecris mon 7 premiers etudiants sur la 1er collones je peux pas remonter a la 2ele collones ( une fois que le row est ecrit c'est cuit)

    Je me trompes ?

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    le row déclare ta ligne
    il suffit que tu fasse une seule ligne avec 2 colonnes ???

    tu mets tes étudiants à la ligne avec un fo:block sans pour autant passer à une nouvelle ligne

    Qu'en penses-tu ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    je vais essayer de suite je te tiens au courant .
    En tout cas c'est cool de ta part j'allais me tirer les cheveux

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    j'ai eu le mm pb c'est normal qu'on s'entraide !!!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    c'est pas plutot la postion qu'il faut et non le count

    <xsl:variable name="position" select="position()"/>

    Apres je fais ca
    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
     
    <fo:table-row>	
    <xsl:if test="$p  &lt; 8">	
    <fo:table-cell>
    <fo:block>
    <xsl:value-of select="nom"/>
    </fo:block>
    </fo:table-cell>	
     
    <fo:table-cell padding="1pt" border-style="solid">
    <fo:block>
    *
    </fo:block>
    </fo:table-cell>	
     
    </xsl:if>
    <xsl:if test="$p &gt; 7">
    <fo:table-cell padding="1pt" border-style="solid">
    <fo:block>
    *
    </fo:block>
    </fo:table-cell>	
    <fo:table-cell padding="1pt" border-style="solid">
    <fo:block>
    <xsl:value-of select="Nom"/>
    </fo:block>
    </fo:table-cell>	
    </xsl:if>			
    </fo:table-row>

    et ca me donne ca


    On s'y approche

  8. #8
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    OK pour la position (je suis au travail impossible de vérifier ce que je t'écris...)

    Moi j'aurai mis ca :

    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
    <fo:table-row> 
     
    <xsl:if test="$p &lt; 8"> 
     
    <fo:table-cell>
    <fo:block>
    <xsl:value-of select="nom"/>
    </fo:block>
    </fo:table-cell> 
     
    </xsl:if>
     
    <xsl:if test="$p &gt; 7">
     
    <fo:table-cell padding="1pt" border-style="solid">
    <fo:block>
    <xsl:value-of select="Nom"/>
    </fo:block>
    </fo:table-cell> 
    </xsl:if> 
     
    </fo:table-row>
    Teste pour voir..

    P.S : fais attention à bien mettre les balises CODE quand tu mets ton code...

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    *ton tableau est tout seul sur la page :
    solution : <fo:region-body region-name="Content" column-count="2" />

    question : est ce que ton nombre de colonnes et/ou de lignes par page est fixe ?

    *si ton tableau n'est pas tout seul et que la présentation est :
    A...........B
    C...........D
    E...........F
    solution : il faut utiliser des modulos

    *si ton tableau n'est pas tout seul et que la présentation est :
    A...........D
    B...........E
    C...........F

    solution : il faut que tu connaisses le nombre d'enregistrement total pour ensuite jouer avec les position()
    mais lorsque tu arrives en fin de page, la présentation ne sera plus naturelle
    1..........50
    2..........51
    ..............
    10........59
    page suivante
    11........60
    12........61
    ..............
    donc plus très évident pour la lecture

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    bonjour quelme ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <LETTRE>
    --<CAR> A </CAR>
    <LETTRE>
    <LETTRE>
    --<CAR> B </CAR>
    <LETTRE>
    <LETTRE>
    --<CAR> C </CAR>
    <LETTRE>
    <LETTRE>
    --<CAR> D </CAR>
    <LETTRE>
    Mon tableau est tout seul dans la page et ma representation souhaiter est

    A...........D
    B...........
    C...........

    je connais le nombre d'element max a gauche donc dans cette exemple 3, il n'y a qu'une seul page.
    La solution de Little_flower me donne pas le resultat attendu.
    Je cherche et si quelqu'un a une solution Thanks

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Tu fais quoi lorsqu'il y a plus de 14 étudiant? nouvelle page?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Non il peux en avoir que 14 donc il rentre tous dans les deux collones.
    C'est une petite classe de 14 etudiants lol ( c'est un exemple je ne gere pas des etudiants c'est juste que c plus simple à expliquer )

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    il n'y a pas plus simple que de faire un tableau d'une seule colonne mais avec un region-body définit sur 2 colonnes
    <fo:region-body region-name="Content" column-count="2" />

    à toi de gérer la marge haute et basse de cette région pour que le body ne puisse plus afficher que 7 lignes

    si je suis pas clair je te fais un bout de code

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Je veux bien un bout de code car je vois pas tres bien ce que tu veux me faire comprendre.
    Tu veux dire que j'ecris ligne par ligne et apres il saute a la collone suivant ?

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Il doit y avoir mieux, mais tu peux t'inspirer de ça qui fait une sortie text facilement adaptable en xsl-fo :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="text" />
     
    	<xsl:variable name="nbEtudiants" select="count(//ETUDIANT)"/>
    	<xsl:variable name="nbLines" select="7"/>
       <xsl:template match="/">
     
       		<xsl:call-template name="for.loop">
       			<xsl:with-param name="i">1</xsl:with-param>
       			<xsl:with-param name="count"><xsl:value-of select="$nbLines"/></xsl:with-param>
       		</xsl:call-template>
     
       </xsl:template>
     
       <xsl:template name="for.loop">
    		<xsl:param name="i"/>
    		<xsl:param name="count"/>
    		<xsl:if test="$i &lt;= $count">
    			<xsl:value-of select="$i"/>.....<xsl:value-of select="//ETUDIANT[0+$i]/PRENOM"/>	
    			<xsl:if test="$nbLines + $i &lt;= $nbEtudiants">
    				<xsl:value-of select="$nbLines + $i"/>.....<xsl:value-of select="//ETUDIANT[$nbLines + $i]/PRENOM"/>	
    			</xsl:if><xsl:text>
    </xsl:text>
    		</xsl:if>
     
    		<xsl:if test="$i &lt;= $count">
    			<xsl:call-template name="for.loop">
     
    				<xsl:with-param name="i">
    					<!-- Increment index-->
    					<xsl:value-of select="1 + $i"/>
    				</xsl:with-param>
    				<xsl:with-param name="count">
    					<xsl:value-of select="$count"/>
    				</xsl:with-param>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
     
    </xsl:stylesheet>

  16. #16
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    bon c'est pas dynamique pour un sou, mais pour avoir un résultat unique et rapide

    voilà

    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
     
     
    <xsl:template match="/">
    	<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	  <fo:layout-master-set>
    		<fo:simple-page-master margin-right="1.5cm" margin-left="1.5cm" margin-bottom="2cm" margin-top="1cm" page-width="21cm" page-height="29.7cm" master-name="first">
    		  <fo:region-body margin-top="115mm" margin-bottom="115mm" column-count="2"/>
    		  <fo:region-before extent="115mm"/>
    		  <fo:region-after extent="115mm"/>
    		</fo:simple-page-master>
    	  </fo:layout-master-set>
     
    	  <fo:page-sequence master-reference="first">
    		<fo:static-content flow-name="xsl-region-before">
    		  <fo:block line-height="14pt" font-size="10pt" text-align="end">TESTING 2 COLONNES</fo:block>
    		</fo:static-content>
    		<fo:static-content flow-name="xsl-region-after">
    		  <fo:block line-height="14pt" font-size="10pt" text-align="end">Page <fo:page-number/></fo:block>
    		</fo:static-content>
     
    		<fo:flow flow-name="xsl-region-body">
    			<fo:block>
    				<xsl:apply-templates/>
    			</fo:block>
    		</fo:flow>
    	  </fo:page-sequence>
    	</fo:root>
    </xsl:template>
     
     
    <xsl:template match="noeudroot">
    	<fo:table>
    		<fo:table-column width="50mm"/>
    		<fo:table-body>
    			<xsl:apply-templates />
    		</fo:table-body>
    	</fo:table>
    </xsl:template>
     
     
    <xsl:template match="LETTRE">
    			<fo:table-row>
    				<fo:table-cell border-style="solid">
    					<fo:block><xsl:value-of select="CAR"/></fo:block>
    				</fo:table-cell>
    			</fo:table-row>
    </xsl:template>
     
     
    </xsl:stylesheet>
    et le XML associé

    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
    <noeudroot>
    <LETTRE>
    <CAR> A </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> B </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> C </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> D </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> E </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> F </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> G </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> H </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> I </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> J </CAR>
    </LETTRE>
    <LETTRE>
    <CAR> K </CAR>
    </LETTRE>
    </noeudroot>

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Merci à tous, j'ai retenu la solution de quelme ca marche nikel chrome
    Juste une chose est ce que c'est possible d'accoler les deux tableaux ?
    Merci bcp bcp de votre aide a tous.

  18. #18
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    essaye dans fo:region-body la propriété column-gap

    c'est l'écartement entre les column-count

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 31
    Points
    31
    Par défaut

    yeaaaaaaaaaaaaaaahhhhhhhhhhhhhhhh impec ca marche du tonnere merci pour tout

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

Discussions similaires

  1. [PPT-2010] Passer automatiquement au slide suivant après une animation
    Par wilkorcv dans le forum Powerpoint
    Réponses: 0
    Dernier message: 07/02/2013, 14h01
  2. [XSLT] xsl:if sur parm, order d'apres param
    Par splifferwolf dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h48
  3. [MySQL] Tableau n'affiche pas les données sur les pages suivantes
    Par orleans dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/12/2007, 20h17
  4. Réponses: 2
    Dernier message: 08/09/2007, 19h24
  5. [XSL]Test sur le noeud fils suivant?
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 06/07/2006, 14h25

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