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 :

[XSLT] tableau dynamique


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut [XSLT] tableau dynamique
    salut
    c'est encore moi avec mes problèmes de transformations
    pour vous mettre à la page j'essaye tjr de transformer un fichier xml généré automatiquement en un fichier pdf ( avec fop )
    le format de 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
     
    <map>
      <entry>
        <string>aaaaaaaaa</string>
        <map>
          <entry>
            <string>bbbbbb</string>
            <map>
              <entry>
                <string>Value :</string>
                <string>cccccc</string>
              </entry>
              <entry>
                <string>Length :</string>
                <string>03</string>
              </entry>
            </map>
          </entry>
          <entry>
    .....
    et je veux alors "dire" à xsl de me mettre chaque niveau de mon fichier xml dans un colone ( ne nbr de colone = 3 au moi ca c'est fixet ) et puis tjr d'étendre la cellule courante suivant le nombre d'enfant du noeud courant ( avec number-rows-spanned je pense non ? )

    j'espère etre clair
    sinon voila d'autres explications ici
    merciiii

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Bonjour,

    heu pourrais tu être un peu plus clair ???
    De plus ton lien ne fonctionne malheuresement pas...

    Merci

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Bon je crois avoir trouver ton mail d'explications plus bas.

    J'ai dû créer des tableaux dynamiques qui s'incrémentaient en fct du nbre de lignes du XML.

    Imaginons un XML comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <N1>1
      <N1.1>1.1
        <N1.1.1>1.1.1
        <N1.1.2>1.1.2
      </N1.1>
      <N1.1>1.2
         .....
      </N1.1>
    </N1>
    <N1>2
      ..........
    Donc moi je pense que tu devré faire ceci :

    Création de ton tableau de base avec tes trois colonnes puis au niveau du body :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <fo:table-body>
    <fo:table-row>
    <xsl:apply-templates select="N1"/>
    </fo:table-row>
    </fo:table-body>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="N1">
    <fo:table-cell>
    <fo:block>
    <xsl:value-of select="."/>
    </fo:block>
    </fo:table-cell>
    <xsl:apply-templates select="N1.1"/>
    </xsl:template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ]<xsl:template match="N1.1">
    <fo:table-cell>
    <fo:block>
    <xsl:value-of select="."/>
    </fo:block>
    </fo:table-cell>
    <xsl:apply-templates select="N1.1.1"/>
    </xsl:template>
    et ainsi de suite et logiquement tu devrais arriver à ton résultat.

    Au passage vérifie que la balise <fo:table-row> soit bien placée sinon place là au niveau de N1.

    A tester !
    Bon courage

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    merci pour ta réponse
    peux tu etre plus claire stp et bien considérer mon niveau trés très très.....

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Bonjour,

    Je t'explique.

    Dans ton XML, il y a 3 niveaux qui vont se mettre sur chaque colonne (3).

    Tu va devoir créer un tableau basique dans lequel tu appeler une fonction.

    Cette fonction te permet de créer dynamiquement les lignes de ta première colonne.
    A l'intérieur de celle ci, on va trouver un appel à une deuxième fonction.

    Et ainsi de suite...

    Dans un tableau, tu déclare le nombre de colonnes à la base puis tu les crée.

    Un exemple simple et type de tableau :
    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
     
    <fo:table>
    <fo:table-column/>
    <fo:table-column/>
    <fo:table-column/>
     
    <fo:table-header>En tête de ton tableau
    <fo:table-row>1ère ligne de ton entête
    <fo:table-cell>1ère cellule de ton entête
    <fo:block/>
    </fo:table-cell>
    </fo:table-row>
    </fo:table-header>
     
    <fo:table-body>Corps de ton tableau dans lequel nous allons placer ta première fonction qui gérera automatiquement le nombre de tes lignes.
    <xsl:apply-templates select="N1"/>
    </fo:table-body>
     
    </fo:table>
    Voila ton tableau est créé.

    Il te reste maintenant à créer tes fonctions qui vont créer autant de lignes que tu veux dans la colonne correspondante :

    Ta première fonction va dire :

    Dans ma première cellule, je crée autant de lignes que je trouve la balise <N1>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:template match="N1">
    <fo:table-cell>
    <fo:block>
    <xsl:value-of select="."/>
    </fo:block>
    </fo:table-cell>
    Comme tes autres balises dépendent de celles-ci, tu dois ajouter la 2ème fonction pour créer les lignes de ta deuxième colonne et ainsi de suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:apply-templates select="N1.1">
    </xsl:template>
    Et tu refait la même chose mais au niveau d'en dessous...

    J'espère avoir réussi à te faire passer le message !!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    merci vraiment pour ton effor mais t'es sure que ca donne ce que je veux comme tableau =>
    récursivement la cellule de droite contient les fils du noeud de la cellule gauche ...
    tu l'a pas essayé toi avec l'exemple que j'ai donné
    merci encore pour tes explication

Discussions similaires

  1. [XSLT] Tableau dynamique
    Par DanDigiMan dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/04/2008, 10h23
  2. [XSLT]de xml vers un tableau dynamique
    Par bwwilly dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 26/06/2007, 10h59
  3. [XSLT]Tableau dynamique xslt
    Par boumbomagic dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 10h07
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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