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 :

Problème basique XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Problème basique XSL
    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="monfichierdemoi2.xsl"?>
    <ANNUAIRE>
    <APPELATION>
        <ID_APPELATION>01</ID_APPELATION>
        <NOM_APPELATION>Saint Estèphe</NOM_APPELATION>
    </APPELATION>
     
    <APPELATION>
        <ID_APPELATION>02</ID_APPELATION>
        <NOM_APPELATION>Saint Julien</NOM_APPELATION>
    </APPELATION>
     
    <APPELATION>
        <ID_APPELATION>03</ID_APPELATION>
        <NOM_APPELATION>Cahors</NOM_APPELATION>
    </APPELATION>
     
    <CHATEAU>
        <ID_APPELATION>01</ID_APPELATION>
    	<ID_CHATEAU>0101</ID_CHATEAU>
    	<NOM_CHATEAU>chateau bellevue</NOM_CHATEAU>
    	<ADRESSE_CHATEAU>12 rue du pont</ADRESSE_CHATEAU>
    	<TEL_CHATEAU>055656565656</TEL_CHATEAU>
    </CHATEAU>
     
    <CHATEAU>
        <ID_APPELATION>01</ID_APPELATION>
    	<ID_CHATEAU>0102</ID_CHATEAU>
    	<NOM_CHATEAU>chateau lacroute</NOM_CHATEAU>
    	<ADRESSE_CHATEAU></ADRESSE_CHATEAU>
    	<TEL_CHATEAU></TEL_CHATEAU>
    </CHATEAU>
     
    <CHATEAU>
        <ID_APPELATION>02</ID_APPELATION>
    	<ID_CHATEAU>0201</ID_CHATEAU>
    	<NOM_CHATEAU></NOM_CHATEAU>
    	<ADRESSE_CHATEAU></ADRESSE_CHATEAU>
    	<TEL_CHATEAU></TEL_CHATEAU>
    </CHATEAU>
     
    ...
    J'aimerais pouvoir afficher une table qui affiche pour chaque appelation tous les chateaux. (memes ceux qui n'appartiennent pas à l'appelation, c'est encore lointain pour moi!! mais si vous avez la solution, je suis preneur!!)

    Exemple :

    Saint estephe
    chateau bellevue
    chateau lacroute
    Saint truc
    chateau bellevue
    chateau lacroute

    Tout simplement...mais je n'y arrive pas!! voici mon code 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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/">
    <html>
    <head>
     <title align="center">vive le vin rouge</title>
    </head>
    <body>
    <xsl:apply-templates select="ANNUAIRE"/>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="ANNUAIRE">
    <p><b><center>Vive les poivrots</center></b></p>
    <table border="1" cellspacing="0" cellpadding="3">
    <tr bgcolor="#FFFF00">
    <td>NOM_APPELATION</td>
    </tr>
    <xsl:apply-templates select="APPELATION"/>
    </table>
    </xsl:template>
     
    <xsl:template match="APPELATION">
    <tr>
    <td><xsl:value-of select="NOM_APPELATION"/></td>
    </tr>
    <xsl:apply-templates select="CHATEAU"/>
    </xsl:template>
     
    <xsl:template match="CHATEAU">
    <tr>
    <td><xsl:value-of select="NOM_CHATEAU"/></td> 
    </tr> 
     
    </xsl:template>
     
    </xsl:stylesheet>
    Merci d'avance!!

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    ce problème de jointure est très courant en XSLT.

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="CHATEAU"/>
    Ca signifie en clair : "appliquer un template à tous les éléments CHATEAU fils de l'élément courant". L'élément courant est un élément APPELATION, qui ne comporte aucun éléments fils CHATEAU. Aucun élément n'est donc sélectionné, et ça ne fonctionne pas.

    la sélection correcte que tu dois faire consiste en :
    "appliquer un template à tous les éléments CHATEAU de la source XML dont le fils ID_APPELATION est égal au fils ID_APPELATION de l'élément courant".

    Ce qui donne en XSLT (et XPath) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="//CHATEAU[ID_APPELATION = current()/ID_APPELATION]"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [PHP-JS] Problème basique de fonction !
    Par Justin_C dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2006, 10h35
  2. Problème de XSL sous FOp
    Par Rei Angelus dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/04/2006, 16h47
  3. probléme avec xsl
    Par linniesurf dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/02/2006, 23h21
  4. [XSLT] Problème PHP + XSL
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/12/2005, 09h16
  5. [XSL]problème avec <xsl:when>
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 27/05/2005, 16h54

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