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] probleme pour faire des tableaux html


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut [XSLT] probleme pour faire des tableaux html
    Bonjour tout le monde,
    Je débute en xml/xsl, et je rencontre un petit probleme, je dispose d'un fichier xml de ce type (pas complet) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        <tests>
            <test_simple type="checkbox" id="malade" valeur="true">Malade</test_simple>
            <test_simple type="nombre" id="taille" valeur="150">Taille</test_simple>
            <test_simple type="chaine" id="pseudo" valeur="MrMaquette">Pseudo</test_simple>
     
            <test_multi id="levures" titre="Levures" nombre_elements="3">
                <test_simple type="checkbox" id="levures.abs" valeur="true">ABS</test_simple>
                <test_simple type="checkbox" id="levures.rr" valeur="false">RR</test_simple>
                <test_simple type="checkbox" id="levures.qq" valeur="true">QQ</test_simple>            
            </test_multi>        
        </tests>
    Ce que j'aimerais faire dans mon fichier xsl (qui génère du xhtml ensuite), c'est faire un tableau en html de telle sorte que pour chaque balise <test_multi> elle créer un nouveau tableau, dans lequel chaque balise contenu dans cette derniere (qui seront que des balises <test_simple>)se situent dans une cellule du tableau, j'aimeraisque le tableau prédéfinie de colonnes que je fixerais moi meme.

    Quelqu'un peut il m'aider ?

    Merci bien :-)

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Ce que tu demandes est vraiment la base de la base en XSLT...

    esaie de chercher par toi même via quelques tutoriels...

    cependant je peux déjà te donner quelques idées...

    tu auras vraissemblablement besoin de 2 templates un pour test_multi et un pour test_simple [plus celui de la racine pour générer la structure générale de la page web (hors tableaux)]

    ensuite, je ne vois pas vraiment quoi d'autre... si tu arrives à comprendre ne serait-ce que vaguement XSLT, tu pourras faire tout seul ce que tu souhaites faire (il n'y a vraiment rien de complexe) et au pire on sera là pour t'aider

    mais si on te donne la solution directement, tu n'y comprendras jamais rien

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Non, mais j'ai déja bien avancer la dedans, le template <test simple> est déja correctement définis, les autres templates (qui sont pas présent ici), ansi que celui de la racine sont aussi définis. Mon probleme c'est surtout pour gerer le fait qu'il doit tjs y avoir le meme nombre d'élément sur une meme ligne :-/ Parce que bon, mettre tous les memes éléments sur une ligne, je peux le faire.

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    bah là je te suis plus alors...

    qu'il y ait toujours le même nombre d'éléments sur une ligne ?

    normalement, tu génères une ligne par test_simple

    donc il n'y aura pas de problèmes... non ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    "normalement, tu génères une ligne par test_simple"

    -> Non justement, sur une ligne, j'ai admettons N colonnes, donc sur une ligne j'ai N <test_simple> (un par cellule)

    Par exemple si j'ai N = 4, et que j'ai 8 <test_simple>, j'aurais deux lignes completes, par contre si j'ai 6 <tests_simple> j'aurais 1 ligne complete, et une autre ligne avec 2 <test_simple>.

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    oula... ah oui... ok je voiyais carrément pas une structure comme ça

    heu... est-ce que les test_mutli et les test_simple peuvent être mélangés, ou est-ce que c'est d'abord tous les test_simple ensuite tous les test_multi ?

    si oui, peux-tu indiquer la structure finale de ton tableau avec un exemple ou test_multi et test_simple sont mélangés, exemple pour le 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
        <tests>
            <test_simple type="checkbox" id="malade" valeur="true">Malade</test_simple>
            <test_simple type="nombre" id="taille" valeur="150">Taille</test_simple>
            <test_simple type="chaine" id="pseudo" valeur="MrMaquette">Pseudo</test_simple>
            <test_multi id="levures" titre="Levures" nombre_elements="3">
                <test_simple type="checkbox" id="levures.abs" valeur="true">ABS</test_simple>
                <test_simple type="checkbox" id="levures.rr" valeur="false">RR</test_simple>
                <test_simple type="checkbox" id="levures.qq" valeur="true">QQ</test_simple>            
            </test_multi>        
            <test_simple type="checkbox" id="malade" valeur="true">Malade</test_simple>
            <test_simple type="nombre" id="taille" valeur="150">Taille</test_simple>
            <test_simple type="chaine" id="pseudo" valeur="MrMaquette">Pseudo</test_simple>
            <test_multi id="levures" titre="Levures" nombre_elements="3">
                <test_simple type="checkbox" id="levures.abs" valeur="true">ABS</test_simple>
                <test_simple type="checkbox" id="levures.rr" valeur="false">RR</test_simple>
                <test_simple type="checkbox" id="levures.qq" valeur="true">QQ</test_simple>            
            </test_multi>        
        </tests>
    enfin, est-ce que tu pourrais donner le template pour test_simple ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    "heu... est-ce que les test_mutli et les test_simple peuvent être mélangés, ou est-ce que c'est d'abord tous les test_simple ensuite tous les test_multi ?"

    -> Non, dans tous les cas, on aura, en premier un <test_multi> suivit uniquement de <test_simple>. (on peut tjs avoir un <test_simple> seul, mais ca, ca ne pose pas de probleme).

    Le fichier xml que tu proposes semble correct, il correspond bien a ce que je veux faire.

    Sinon pour le template de <test_simple> c'est tres basique, si j'ai type="checkbox", j'aurais une checkbox avec un titre a coté, si c'est type="nombre|chaine", j'aurais un input text avec un titre a coté.

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Lockless
    Citation Envoyé par Swoög
    heu... est-ce que les test_mutli et les test_simple peuvent être mélangés, ou est-ce que c'est d'abord tous les test_simple ensuite tous les test_multi ?"
    -> Non, dans tous les cas, on aura, en premier un <test_multi> suivit uniquement de <test_simple>. (on peut tjs avoir un <test_simple> seul, mais ca, ca ne pose pas de probleme).

    Le fichier xml que tu proposes semble correct, il correspond bien a ce que je veux faire.
    Les deux choses que tu dis sont contradictoire, j'ai mélanger des test_simple et des test_multi, je pense que tu confonds "suivre" et "contenir"

    Citation Envoyé par Lockless
    Sinon pour le template de <test_simple> c'est tres basique, si j'ai type="checkbox", j'aurais une checkbox avec un titre a coté, si c'est type="nombre|chaine", j'aurais un input text avec un titre a coté.
    Certes, mais il me faudrait tout de même le template pour pouvoir reprendre ton code et rester dans la même logique de codage que toi

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    "Les deux choses que tu dis sont contradictoire, j'ai mélanger des test_simple et des test_multi, je pense que tu confonds "suivre" et "contenir"

    -> Oui j'ai mal compris, test_simple et test_multi peuvent se suivrent (comme dans ton exemple) et test_multi peut contenir que des test_simple (aussi comme dans ton exemple), sinon pour le templates le voici :

    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
     
     
    <xsl:template match="test_simple">
    	<xsl:if test="@type = 'checkbox'">
    		<xsl:if test="@valeur = 'true'">
    			<label><xsl:value-of select="." /> : <input type="checkbox" name="{@id}" checked="checked" /></label>
    		</xsl:if>
    		<xsl:if test="@valeur = 'false'">
    			<label><xsl:value-of select="." /> : <input type="checkbox" name="{@id}" /></label>
    		</xsl:if>
    	</xsl:if>
    	<xsl:if test="@type = 'nombre'">
    		<label><xsl:value-of select="." /> : <input type="text" name="{@id}" value="{@valeur}" /></label>
    	</xsl:if>
    	<xsl:if test="@type = 'chaine'">
    		<label><xsl:value-of select="." /> : <input type="text" name="{@id}" value="{@valeur}" /></label>
    	</xsl:if>
    </xsl:template>
    (J'ai pas testé la validité xhtml, mais c'est pas tres grave, je ferais ca apres)

    Si ca peut t'aider voici les fichiers complets :
    - xml : http://rafb.net/paste/results/EZuUlI25.html
    - xsl : http://rafb.net/paste/results/9jT9vB85.html

    Si y'a des remarques a faire sur le code hésite pas :-)

  10. #10
    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
    Points : 10 927
    Points
    10 927
    Par défaut
    le plus simple, reutilisez ce qui a deja ete fait:
    http://www.developpez.net/forums/sho...56&postcount=2

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    En regardant les deux exemples, j'ai écris un truc, je pense que ca devrait marcher, par contre je rencontre un probleme, a priori ca vient de la valeur de position() (j'aimerais qu'elle retourne la position actuelle dans le for-each sur les <test_simple>), mais on dirait qu'elle ne s'utilise pas comme ca :-/

    Le template :

    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
     
    <xsl:template match="test_multi">   
        <table border="1">
            <caption><xsl:value-of select="@titre" /></caption>
            <xsl:for-each select="//test_simple">
                <xsl:if test="position() mod {@nb_elems} = 1">
                    <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>        
                </xsl:if>
                    <td><xsl:apply-templates select="."/></td>
                <xsl:if test="position() mod {@nb_elems} = 0">
                    <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text>        
                </xsl:if>  
            </xsl:for-each>
        </table>
    </xsl:template>
    Le xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        <tests>
            <test_multi titre="Test multiple" id="multi_test" nb_elems="2">
                <test_simple type="checkbox" id="multi_test.malade" valeur="true">Blabla</test_simple>
                <test_simple type="checkbox" id="multi_test.malade2" valeur="false">Blabla</test_simple>
                <test_simple type="checkbox" id="multi_test.malade3" valeur="false">Blabla</test_simple>
                <test_simple type="checkbox" id="multi_test.malade4" valeur="true">Blabla</test_simple>
                <test_simple type="vide" />
            </test_multi>
        </tests>
    nb_elems représente le nombre de <test_simple> par ligne du tableau.

Discussions similaires

  1. [XL-2010] Macro pour boucler dans une liste pour faire des tableaux/onglets
    Par Souris1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/09/2013, 17h25
  2. Recherche composant pour faire des tableaux
    Par Anthone dans le forum C#
    Réponses: 2
    Dernier message: 03/09/2010, 12h23
  3. [XSLT] aide pour faire un tableau HTML avec fusion de lignes
    Par utwor dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 02/01/2006, 21h41
  4. Réponses: 7
    Dernier message: 16/04/2005, 08h55

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