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] besoin d'aide XML -> listes HTML imbriquées


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut [XSLT] besoin d'aide XML -> listes HTML imbriquées
    Bonjour,

    je suis débutant en XSLT, je dois néanmois réussir a présenter une liste imbriquée HTML à partir d'un fichier XML de cette forme :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <?xml version="1.0" encoding="UTF-8"?>
    <catalogue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="catalogue.xsd">
    	<domaines>
    		<domaine>
    			<nom><![CDATA[Hi-Fi]]></nom>
    		</domaine>
    		<domaine>
    			<nom><![CDATA[Home-cinéma]]></nom>
    		</domaine>
    	</domaines>
     
     
    	<rayons>
    		<rayon>
    			<nom><![CDATA[Enceintes]]></nom>
    			<domaines>
    				<domaine><![CDATA[Hi-Fi]]></domaine>
    				<domaine><![CDATA[Home-cinéma]]></domaine>
    			</domaines>
    		</rayon>
    		<rayon>
    			<nom><![CDATA[Amplificateurs]]></nom>
    			<domaines>
    				<domaine><![CDATA[Hi-Fi]]></domaine>
    				<domaine><![CDATA[Home-cinéma]]></domaine>
    			</domaines>
    		</rayon>
    		<rayon>
    			<nom><![CDATA[Supports]]></nom>
    			<domaines>
    				<domaine><![CDATA[Home-cinéma]]></domaine>
    			</domaines>
    		</rayon>
    		<rayon>
    			<nom><![CDATA[Ecrans]]></nom>
    			<domaines>
    				<domaine><![CDATA[Home-cinéma]]></domaine>
    			</domaines>
    		</rayon>
    	</rayons>
     
    	<categories>
    		<categorie>
    			<nom><![CDATA[Amplificateurs home-cinéma]]></nom>
    			<rayons>
    				<rayon><![CDATA[Amplificateurs]]></rayon>
    			</rayons>
    		</categorie>
    		<categorie>
    			<nom><![CDATA[Amplificateurs Haute-fidélité]]></nom>
    			<rayons>
    				<rayon><![CDATA[Amplificateurs]]></rayon>
    			</rayons>
    		</categorie>
    		<categorie>
    			<nom><![CDATA[Supports muraux]]></nom>
    			<rayons>
    				<rayon><![CDATA[Supports]]></rayon>
    			</rayons>
    		</categorie>
    		<categorie>
    			<nom><![CDATA[Pieds]]></nom>
    			<rayons>
    				<rayon><![CDATA[Supports]]></rayon>
    			</rayons>
    		</categorie>
    		<categorie>
    			<nom><![CDATA[Ecrans de projections]]></nom>
    			<rayons>
    				<rayon><![CDATA[Ecrans]]></rayon>
    			</rayons>
    		</categorie>
    		<categorie>
    			<nom><![CDATA[Téléviseurs]]></nom>
    			<rayons>
    				<rayon><![CDATA[Ecrans]]></rayon>
    			</rayons>
    		</categorie>
     
    	</categories>
    </catalogue>
    Le résultat que j'aurais souhaité avoir en HTML est le suivant :
    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
    <ul>
    		<li>Hi-fi
    			<ul>
    				<li>Enceintes</li>
    				<li>Amplificateurs
    					<ul>
    						<li>Amplificateurs home-cinéma</li>
    						<li>Amplificateurs Haute-fidélité</li>
    					</ul>
    				</li>
    				<li>Supports
    					<ul>
    						<li>Supports muraux</li>
    						<li>Pieds</li>
    					</ul>
    				</li>
    			</ul>
    		</li>
    		<li>Home-Cinema
    			<ul>
    				<li>Ecrans
    					<ul>
    						<li>Ecrans de projections</li>
    						<li>Téléviseurs</li>
    					</ul>
    				</li>
    			</ul>
    		</li>
    	</ul>
    Actuellement j'arrive a faire trois liste séparées mais je n'arrive pas les imbriquer les unes aux autres.
    mon xslt actuelle :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="http://www.ora.com/XSLTCookbook/namesapce/html">
     
    	<xsl:template match="/">
     
    		<html>
    			<head>
    				<title>Arborescence</title>
    			</head>
    			<body BGCOLOR="#FFFFFF">
    				<xsl:apply-templates />
    			</body>
    		</html>
    	</xsl:template>
     
    	<xsl:template match="domaines">
    		<ul>
    			<xsl:for-each select="domaine">
    				<li>
    					<xsl:value-of select="nom" />
    				</li>
    			</xsl:for-each>
    		</ul>
    	</xsl:template>
     
    	<xsl:template match="rayons">
    		<ul>
    			<xsl:for-each select="rayon">
    				<li>
    					<xsl:value-of select="nom" />
    				</li>
    			</xsl:for-each>
    		</ul>
    	</xsl:template>
     
    	<xsl:template match="categories">
    		<ul>
    			<xsl:for-each select="categorie">
    				<li>
    					<xsl:value-of select="nom" />
    				</li>
    			</xsl:for-each>
    		</ul>
    	</xsl:template>
     
    </xsl:stylesheet>
    Pouvez-vous m'éclairer s'il vous plait, car je ne suis pas habitué à la logique XSLT.

    Merci mille fois.

  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 : 47
    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
    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
     
    ....
    <xsl:template match="domaines">
    		<ul>
    			<xsl:apply-templates select="*"/>
     
    		</ul>
    </xsl:template>
    <xsl:template match="nom">
    		<li>
    		     <xsl:value-of select="nom" />
    		</li>
     
     
    </xsl:template>
    ...
    Etc....

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Hum... peut ête que je dois pas bien comprendre, mais le code ne m'aide pas plus pour faire ma liste comme je le voudrait., je continu de me creuser la tête ... dur dur

  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 : 47
    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
    Citation Envoyé par lasdou15 Voir le message
    Hum... peut ête que je dois pas bien comprendre,
    en effet

    C'est ce type de code qui permet de suivre des imbrications.

    Maintenant comme tu n'as pas expliqué comment fonctionnait ton XML, par exemple pourquoi il ya enceintes en dessous de Hi-fi alors que ce sont des listes différentes, je ne vois pas pourquoi je devrais me casser le cul, à essayer de le deviner tout seul.
    Je n'ai pas pris l'option "boule de cristal" dans mes etudes

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Ok, je vais expliquer la structure du xml, du moins je vais essayer ...

    Donc il faut voir cette structure comme de cette manière

    niveau 0 : catalogue
    --> niveau 1 : domaine
    -->--> niveau 2 : rayons
    -->-->--> niveau3 : categories

    une catégorie peut être présente dans un ou plusieurs rayons, un rayon de peut être présent dans un ou plusieurs domaines, les domaines sont dans le catalogue.

    l'idée est de ne pas faire un arbre ordinaire avec une structure du type :
    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
    <catalogue>
        <domaine>
            <rayon>
                <categorie></categorie>
                <categorie></categorie>
            </rayon>
            <rayon>
                <categorie></categorie>
                <categorie></categorie>
            </rayon>
        </domaine>
        <domaine>
            <rayon>
                <categorie></categorie>
                <categorie></categorie>
            </rayon>
        </domaine>
    </catalogue>
    domaines, rayons et catégories sont donc séparés et on précise pour chaque categorie le ou les rayons dans lequel elle est, et pour chaque rayon le ou les domaines dans le(les)quels il se situe.

    A la manière de clef étrangères.

    Cette méthode à été choisie car elle nous est aparue comme moins redondante pour la quantité de données que nous avons.

    Mais il est vrai qu'elle devient dès plus compliquée à traiter avec xslt.

    Avis aux amateur toute aide est la bienvenue.

    Merci.

  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 : 47
    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
    dela doit donner des templates dans ce style (je n'ai pas verifié les xpath)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	<xsl:template match="domaine">
    		<li>
    			<xsl:value-of select="nom"/>
    			<xsl:if test="/catalogue/rayons/rayon[domaines/domaine=current()/nom]">
    				<ul>
    					<xsl:apply-templates select="/catalogue/rayons/rayon[domaines/domaine=current()/nom]"/>
    				</ul>
    			</xsl:if>
    		</li>
    	</xsl:template>

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Super, merci, c'est l'idée, ca m'avance déja un peu, cela affiche donc deux niveaux, mais pour accéder au troisième niveau (afficher les catégories présentes dans les rayons) je vois pas comment faire.

    autre question, comment paramétrer l'affichage de ce que va renvoyer cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="/catalogue/rayons/rayon[domaines/domaine=current()/nom]"/>
    ?

    Merci, je crois qu'on y est presque.
    JE continue de tester différentes possibilités de mon côté avec le code que tu m'a fourni Erwy. c'est vraiment sympa de ta part.


  8. #8
    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 : 47
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="rayon">
    		<li>
    			<xsl:value-of select="nom"/>
    			<xsl:if test="/catalogue/categories/categories[rayons/rayon=current()/nom]">
    				<ul>
    					<xsl:apply-templates select="/catalogue/categories/categorie[rayons/rayon=current()/nom]"/>
    				</ul>
    			</xsl:if>
    		</li>
    	</xsl:template>
    etc....

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    MERCI MERCI MERCI MERCI !!!!!! Mille fois merci !!

    ça marche impeccable, la liste est parfaite, tu assure un max Erwy !!!

    aprés intégration des morceaux de codes que tu m'a fournis voila la feuille xsl qui fonctionne :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="http://www.ora.com/XSLTCookbook/namesapce/html">
     
    	<xsl:template match="/">
     
    		<html>
    			<head>
    				<title>Arborescence</title>
    			</head>
    			<body BGCOLOR="#FFFFFF">
    <ul>
    				<xsl:apply-templates select="/catalogue/domaines/*" />
    </ul>
    			</body>
    		</html>
    	</xsl:template>
     
      <xsl:template match="domaine">
                    <li>
                            <xsl:value-of select="nom"/>
                            <xsl:if test="/catalogue/rayons/rayon[domaines/domaine=current()/nom]">
                                    <ul>
                                            <xsl:apply-templates select="/catalogue/rayons/rayon[domaines/domaine=current()/nom]"/>
                                    </ul>
                            </xsl:if>
                    </li>
            </xsl:template>
     
            <xsl:template match="rayon">
                    <li>
                            <xsl:value-of select="nom"/>
                            <xsl:if test="/catalogue/categories/categorie[rayons/rayon=current()/nom]">
                                    <ul>
                                            <xsl:apply-templates select="/catalogue/categories/categorie[rayons/rayon=current()/nom]"/>
                                    </ul>
                            </xsl:if>
                    </li>
            </xsl:template>
     
            <xsl:template match="categorie">
                    <li>
                            <xsl:value-of select="nom"/>
                    </li>
            </xsl:template>
     
    </xsl:stylesheet>
    Encore merci pour tes lumières, tu est un vrai pro, et de plus tu m'as permis de mieux comprendre le fonctionnement des feuilles de style !!

    Youpiiii !!

    Allé je me calme.

    Bonne journée et a trés bientôt.

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

Discussions similaires

  1. [XSLT] Besoin d'aide fusion d'information
    Par henri93 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 09/10/2009, 15h14
  2. Réponses: 6
    Dernier message: 16/02/2008, 21h53
  3. Besoin d'aide sur les listes
    Par Vincent Dieudonné dans le forum SharePoint
    Réponses: 5
    Dernier message: 24/05/2007, 12h34
  4. [List] Besoin d'aide à propos de liste de listes
    Par Moifairedujava dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/02/2007, 11h02
  5. [Tableaux] Besoin d'aide pour parser du HTML
    Par vallica dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2006, 22h12

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