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] Générer un tableau dynamique


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut [XSL] Générer un tableau dynamique
    Me revoilà

    J'aimerais donc générer un tableau HTML dynamiquement à partir de mon fichier XML qui est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <employee>
      <note>2</note> 
      <tauxObj>60.00</tauxObj> 
      <midpointOld>0 EUR</midpointOld> 
      <comparatioOld>0.0000</comparatioOld> 
      <salref>70000.00</salref> 
      <salconv /> 
      <midpoint>0 EUR</midpoint> 
      <comparatio>0.0000</comparatio> 
      </employee>
    Je souhaite avoir systématiquement 4 colonnes en revanche le nombre de ligne est illimité. Une ligne du tableau doit ressembler à ceci :

    Titre1 Data1 Titre2 Data2
    ...

    Quand un élément XML est à vide je ne souhaite pas afficher la donnée (comme "salconv" dans mon exemple) et c'est bien là mon soucis : je peux avoir un nombre impaire de données à afficher.

    Si j'ai 5 éléments j'aurais donc le tableau suivant :

    Titre1 Data1 Titre2 Data2
    Titre3 Data3 Titre4 Data4
    Titre5 Data5

    Merci pour votre aide

  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
    Bonjour,

    Je vais te donner un code qui te permettra de créer un tableau de façon dynamique avec autant de lignes que tu veux et tu pourras fusionner tes cellules ou ne rien mettre...

    Dans ton cas pour le XML, chaque ligne corresponra à une balise <employee> qui contient elle même 4 balises : Nom, Prénom, Naissance et Téléphone.

    Ton XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Employee>
      <Nom>zrig</Nom>
      <Prenom>ozeu</Prenom>
      <Naissance>15/08/79</Naissance>
      <Telephone>0526356498</Telephone>
    <Employee>
    Ton XSL :

    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
     
    <xsl:template match="Employee">
     
    	<!-- Création d'une ligne dans laquelle on va insérer les données -->
     
    <fo:table-row>
     
    <fo:table-cell border-left-color="blue" border-left-style="solid" border-right-			color="blue" border-right-style="solid" border-bottom-				color="blue" border-bottom-style="solid" >
    <fo:block text-align="left" margin-left="0.2cm" padding-top="0.2cm" padding-			bottom="0.2cm">
     
    		<-- Insertion de la donnée dans la cellule Nom-->
     
    <xsl:value-of select="Nom"/>
    </fo:block>
    </fo:table-cell>
     
    <fo:table-cell border-right-color="blue" border-right-style="solid" border-				bottom-color="blue" border-bottom-style="solid">
    <fo:block padding-top="0.2cm" padding-bottom="0.2cm" text-align="left" margin-			left="0.2cm">
     
             <-- Insertion des données dans la cellule Prénom -->
     
    <xsl:value-of select="Prenom"/>
     </fo:block>
    </fo:table-cell>
     
    <fo:table-cell border-right-color="blue" border-right-style="solid" border-				bottom-color="blue" border-bottom-style="solid">
    <fo:block padding-top="0.2cm" padding-bottom="0.2cm" text-						align="center">
     
    		<-- Insertion de la donnée dans la cellule Naissance -->
     
    <xsl:value-of select="Naissance"/>
    </fo:block>
    </fo:table-cell>
     
    <fo:table-cell border-right-color="blue" border-right-style="solid" border-				bottom-color="blue" border-bottom-style="solid">
    <fo:block padding-top="0.2cm" padding-bottom="0.2cm" text-						align="center">
     
    		<-- Insertion de la donnée dans la cellule Téléphone -->
     
    <xsl:value-of select="Telephone"/>
    </fo:block>
    </fo:table-cell>
     
    </fo:table-row>
     
    </xsl:template>
    Au préalable tu auras créé un tableau avec tes titres et tu placeras le template en dessous de ta ligne de titre pour pouvoir le répéter autant de fois que tu veux...

    Voila il ne te reste plus qu'à adapter ce code pour ton problème

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse mais mon soucis c'est que les données sont dynamiques, je peux avoir 2, 3, 6, 9... éléments, ta solution n'est donc pas envisageable pour moi.

  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
    tes éléments ont ils un nom bien définis ???

    Car tu pourrai les appeler tous cellules par exemple et donc remplir ton tableau par ligne avec les cellules qui se rentreraient automatiquement...

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Oui chaque élément a un nom spécifique.

    Ta solution semble correcte, mais ça me fait pas mal de modification, ça m'arrrange pas

  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
    Et bien si tu veux quelque chose de dynamique pour remplir tes cellules automatiquement il faut que tu fasse un XML hyper généraliste et donc le mieux serait que tes balises aient le même nom ou si tu veux que tu ais 2 noms de balises différents max mais après si tu dois garder tes valeurs initiales je pense que tu vas t'arracher les cheveux !!!

    Si quelqu'un a une autre solution pour toi tant mieux !!

    Moi je vois ca comme ca !
    Bon courage !!

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Oui je pense que tu as raison, je vais surement revoir mon XML c'est la façon la plus simple.

    Merci pour ton aide

Discussions similaires

  1. [PDF] Comment générer un tableau dynamique ?
    Par baptx dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/07/2007, 13h29
  2. [xsl-fo]Tableau dynamique et variable
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 23/05/2007, 16h46
  3. [xsl-fo]Problème Mise en page tableau dynamique
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/05/2007, 14h01
  4. Réponses: 1
    Dernier message: 12/01/2007, 08h36
  5. Création d'un tableau dynamique avec XSL-FO
    Par lionelbrizuela dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2006, 11h04

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