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 :

un trombinoscope multi colonne en xsl


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut un trombinoscope multi colonne en xsl
    Bonjour
    voici mon fichier xml :
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <fichier>
      <adresse>
          <personne>
             <code_adherent>1</code_adherent>
             <nom>Lenom1</nom>
             <prenom>Leprenom1</prenom>
             <photo>Levisage1.jpg</photo>
           <club>
                <an_adh>2004</an_adh>
                <section>kmer</section>
                <section>handisport</section>
             </club>
          </personne>
          <voie1 accord="oui"></voie1>
         <codepostal> </codepostal>
          <ville>  </ville>
       </adresse>
       <adresse>
          <personne>
             <code_adherent>2</code_adherent>
             <nom>Lenom1</nom>
             <prenom>Leprenom1</prenom>
              <club>
                <an_adh>2004</an_adh>
                <section>kmer</section>
             </club>
          </personne>
          <voie1 accord="oui">  </voie1>
         <codepostal>  </codepostal>
          <ville> </ville>
       </adresse>
       ******
       <adresse>
          <personne>
             <code_adherent>   n</code_adherent>
             <nom>Lenomn</nom>
             <prenom>Leprenomn</prenom>
             <photo>Levisagen.jpg</photo>
           <club>
                <an_adh>2004</an_adh>
                <section>kmer</section>
             </club>
          </personne>
          <voie1 accord="oui">  </voie1>
           <codepostal>  </codepostal>
          <ville>   </ville>
       </adresse>
     </fichier>
    je cherche à faire un trombinoscope sur deux colonnesde deux cellules, c'est a dire avec la présentation suivante :
    <table><tr><td>nom1, prénom1 etc...</td<td>photo1</td><td>nom2 prenom2...</td><td>photo2</td></tr>

    plusieurs lignes et fin de table.
    ne connaissant pas les subtilités de xsl et des commandes fo pouvez vous me conseiller sur la solution la plus simple pour : trier les noms par ordre alphabétique (je sais faire), n'afficher que les personnes qui ont un élément photo (j'ai trouvé une solution) et garder la présentation en multicolonne, j'utilise saxon comme compilateur.
    j'essaye de m'inspirer des solutions proposées dans ce forum et avec les défis, mais pour le moment je coince.
    Merci d'avance pour le temps que vous pourrez me consacrer.

    [ Balise CODE ajoutée par ridan ]
    [ Pensez-y à l'avenir. Merci. ]

  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

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut
    merci erwy cette page me sert de base pour l'adapter à mon probléme, néanmoins je ne connais pas le nombre de ligne à l'avance et je ne veux pas de rupture.
    pour aider, voici le xml (simple ) qui fonctionne sur une colonne
    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" version="1.0">
    <xsl:output method="html" indent="yes" />
     
    <xsl:template match="fichier">
    	<html>
    		<head>
    			<title> Liste alphabétique adhérents kmer</title>
    			<LINK TITLE="AFFICHAGE" TYPE="text/css" REL="stylesheet" HREF="adresse.css" />
    		</head>
    		<body>
    			<xsl:call-template name="body"/>
    		</body>
    	</html>
    </xsl:template>
     
    <xsl:template name="body">
    		<!-- lignes courantes -->
    		<h1>Trombinoscope Provisoire</h1>
    		<table border="1">
    		<tr><td>Nom  Prénom  téléphone  tél portable  adresse email</td><td>Photo</td></tr>
        <xsl:apply-templates select="adresse/personne">
         <xsl:sort select="nom"/>
        </xsl:apply-templates>
     
    	</table>
    </xsl:template>
     
     <xsl:template match="personne">
            <xsl:choose>
               <xsl:when test="photo='victor.jpg'"> </xsl:when>
                 <xsl:when test="photo !='victor.jpg'"> 
     
          		<tr><td>
    		   	   <xsl:value-of select="nom"/>  
    			   <xsl:value-of select="prenom"/>
    		    <br/>tel : 
    			   <xsl:value-of select="../telephone"/>
    		    <br/>cellulaire  : 
    			   <xsl:value-of select="cell"/>
    		    <br/>email  : 
    		       <xsl:variable name="mailsrc" select="mail"/> 
    		    <A HREF="mailto:{$mailsrc}"><xsl:value-of select="mail"/> </A>
               </td><td>
                   <xsl:variable name="src" select="photo"/> 
                       <img src="images/{$src}"/>
              </td></tr>
           </xsl:when>
         </xsl:choose>
    	</xsl:template>
     
    </xsl:stylesheet>
    je cherche à l'adapter pour introduire un test du style
    si compteur mod 2 =1 alors écrire </tr><tr> et ligne suivante

    ps1: la valeur 'victor.jpg' me servait pour valeur par défaut, jusqu'à ce que je découvre qu'il était possible qu'une balise soit absente...

    Ps2 j'imagine que mon code n'est pas du tout optimisé et qu'il y a plus subtil, merci ^pour votre indulgence.

    [ Balise CODE ajoutée par ridan ]
    [ Pensez-y à l'avenir. Merci. ]

  4. #4
    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
    pas testé
    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
    <?xml version= "1.0" encoding='ISO-8859-1'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes" />
     
    <xsl:template match="fichier">
    	<html>
    		<head>
    			<title> Liste alphabétique adhérents kmer</title>
    			<LINK TITLE="AFFICHAGE" TYPE="text/css" REL="stylesheet" HREF="adresse.css" />
    		</head>
    		<body>
    			<xsl:call-template name="body"/>
    		</body>
    	</html>
    </xsl:template>
     
    <xsl:template name="body">
    		<!-- lignes courantes -->
    		<h1>Trombinoscope Provisoire</h1>
    		<table border="1">
    		<tr><td>Nom  Prénom  téléphone  tél portable  adresse email</td><td>Photo</td><td>Nom  Prénom  téléphone  tél portable  adresse email</td><td>Photo</td></tr>
        <xsl:apply-templates select="adresse/personne">
         <xsl:sort select="nom"/>
        </xsl:apply-templates>
     
    	</table>
    </xsl:template>
     
     <xsl:template match="personne">
            <xsl:choose>
               <xsl:when test="photo='victor.jpg'"> </xsl:when>
                 <xsl:when test="photo !='victor.jpg'"> 
    <xsl:if test="position() mod (2)=1"> 
      <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text >
    </xsl:if >
    <td>
    		   	   <xsl:value-of select="nom"/>  
    			   <xsl:value-of select="prenom"/>
    		    <br/>tel : 
    			   <xsl:value-of select="../telephone"/>
    		    <br/>cellulaire  : 
    			   <xsl:value-of select="cell"/>
    		    <br/>email  : 
    		       <xsl:variable name="mailsrc" select="mail"/> 
    		    <A HREF="mailto:{$mailsrc}"><xsl:value-of select="mail"/> </A>
               </td><td>
                   <xsl:variable name="src" select="photo"/> 
                       <img src="images/{$src}"/>
              </td>
     
    <xsl:if test="position() mod (2)=0 or position()=last()"> 
      <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text >
     
    </xsl:if >
           </xsl:when>
         </xsl:choose>
    	</xsl:template>
     
    </xsl:stylesheet>

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut
    Merci pour le code,
    je suis en train de l'éplucher car il me révèle des nouvelles possibilités,
    néanmoins il ne réponds pas tout à fait à ma problématique car j'ai le résultat suivant :

    nom1 nom2
    nom3 nom4
    nom5 blanc
    nom6 blanc
    nom7
    nom8

    je soupçonne l'utilisation de "position" d'être à l'origine de cela car ma liste de nom est plus longue et tout le monde n'a pas de photo, pour le moment.
    je partais sur l'idée d'extraire les noeux adresse qui avaient une ou plusieurs photos dans un autre arbre et appliquer ce que vous proposiez pour le multi colonne.
    D'autre part je suis surpris du succes du sort alors que dans mes essais mon tri affichait toutes les données, mais triées.
    Merci en tout cas pour cette avancée.

  6. #6
    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
    plutot ça
    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
      <xsl:apply-templates select="adresse/personne[photo !='victor.jpg']"> 
         <xsl:sort select="nom"/> 
        </xsl:apply-templates> 
     
       </table> 
    </xsl:template> 
     
     <xsl:template match="personne"> 
     
    <xsl:if test="position() mod (2)=1"> 
      <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text > 
    </xsl:if > 
    <td> 
                   <xsl:value-of select="nom"/>  
                <xsl:value-of select="prenom"/> 
              <br/>tel : 
                <xsl:value-of select="../telephone"/> 
              <br/>cellulaire  : 
                <xsl:value-of select="cell"/> 
              <br/>email  : 
                 <xsl:variable name="mailsrc" select="mail"/> 
              <A HREF="mailto:{$mailsrc}"><xsl:value-of select="mail"/> </A> 
               </td><td> 
                   <xsl:variable name="src" select="photo"/> 
                       <img src="images/{$src}"/> 
              </td> 
     
    <xsl:if test="position() mod (2)=0 or position()=last()"> 
      <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text > 
     
    </xsl:if > 
     
       </xsl:template>

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut c'est résolu et cela fonctionne
    voici le code complet de l'xsl pour éviter à erwy de se redire :

    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
    <?xml version= "1.0" encoding='ISO-8859-1'?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" indent="yes" /> 
    <xsl:template match="fichier"> 
       <html> 
          <head> 
             <title> Liste alphabétique adhérents kmer</title> 
             <LINK TITLE="AFFICHAGE" TYPE="text/css" REL="stylesheet" HREF="adresse.css" /> 
          </head> 
          <body> 
             <xsl:call-template name="body"/> 
          </body> 
       </html> 
    </xsl:template> 
     
    <xsl:template name="body"> 
          <!-- lignes courantes --> 
          <h1>Trombinoscope Provisoire</h1> 
          <p>Pour que le trombi devienne définitif merci d'envoyer votre photo avec nom, prénom, adresse, email, telephone fixe, téléphone portable 
          à l'email suivante : *****@voila.fr ou de laisser une enveloppe ici en y mettant les memes mentions - merci - </p>
          <p> seriez vous d'accord pour y mettre les téléphones portable et de domicile et d'email ? </p>
          <table border="1"> 
             <tr><td>Nom  Prénom  téléphone  tél portable  adresse email</td><td>Photo</td><td>Nom  Prénom  téléphone  tél portable  adresse email</td><td>Photo</td></tr> 
             <xsl:apply-templates select="adresse/personne[photo !='victor.jpg']"> 
                <xsl:sort select="nom"/> 
            </xsl:apply-templates> 
          </table> 
    </xsl:template> 
     
     <xsl:template match="personne"> 
     
          <xsl:if test="position() mod (2)=1"> 
              <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text > 
           </xsl:if > 
              <td> 
                   <xsl:value-of select="nom"/>                  
                <xsl:value-of select="prenom"/> 
              <br/>tel : 
                <xsl:value-of select="../telephone"/> 
              <br/>cellulaire  : 
                <xsl:value-of select="cell"/> 
              <br/>email  : 
                 <xsl:variable name="mailsrc" select="mail"/> 
              <A HREF="mailto:{$mailsrc}"><xsl:value-of select="mail"/>   </A> 
               </td><td> 
                   <xsl:variable name="src" select="photo"/> 
                       <img src="images/{$src}"/> 
              </td> 
              <xsl:if test="position() mod (2)=0 or position()=last()"> 
             <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text > 
           </xsl:if > 
       </xsl:template> 
    </xsl:stylesheet>
    un grand merci pour erwy pour son aide décisive, il me reste maintenant à comprendre le xsl:fo pour faire des impressions correctes sur des pages blanches.
    ps existe-t-il un bon bouquin de référence sur le xsl pour bien comprendre le code ci-dessus ?

    [ Balise CODE ajoutée par ridan ]
    [ Pensez-y à l'avenir. Merci. ]

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

Discussions similaires

  1. [C#] ListBox Control multi colonnes
    Par youda dans le forum Windows Forms
    Réponses: 2
    Dernier message: 31/05/2016, 15h15
  2. [VB6] comment saisir l'entête Listbox (multi colonnes)
    Par oumarsaw dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/04/2006, 16h21
  3. [VB.NET]ComboBox Multi-Colonnes
    Par Golzinne dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2006, 18h55
  4. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  5. Affichage ComboBox multi-colonnes
    Par dough29 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/12/2005, 12h28

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