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 :

XML1 + XML2 = XML3 > HTML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut XML1 + XML2 = XML3 > HTML
    Bonsoir,

    L'intitulé de mon message n'est surement pas très clair, mais j'ai pas trouvé mieux...

    En fait, j'ai le fichier XML suivant, album.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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?xml version="1.0"?>
     
    <album>
     
    <photo>
    <titre>Lac de montagne</titre>
    <lieu>Alpes</lieu>
    <date>2012</date>
    <auteur>
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Désert</titre>
    <lieu>Sahara</lieu>
    <date>2007</date>
    <auteur>
    <nom>Olivier</nom>
    <prenom>Alex</prenom>
    <age>27</age>
    <pays>Suisse</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Océan</titre>
    <lieu>Bretagne</lieu>
    <date>2011</date>
    <auteur>
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Centre Ville</titre>
    <lieu>Tokyo</lieu>
    <date>2000</date>
    <auteur>
    <nom>Haston</nom>
    <prenom>Mora</prenom>
    <age>33</age>
    <pays>Autralie</pays>
    </auteur>
    </photo>
     
    </album>
    Ce fichier n'est pour l'instant pas très long et je voudrais en profiter pour chercher un moyen plus élégant qui éviterait la redondance de l'information concernant les auteurs. Je voudrais savoir s'il y aurait pas plutôt moyen de partir plutôt de deux fichiers xml différents, comme par exemple :

    photo.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
     
    <?xml version="1.0"?>
    <photo>
    <titre>Lac de montagne</titre>
    <lieu>Alpes</lieu>
    <date>2012</date>
    <auteur id="1"/>
    </photo>
    <photo>
    <titre>Désert</titre>
    <lieu>Sahara</lieu>
    <date>2007</date>
    <auteur id="2"/>
    </photo>
    <photo>
    <titre>Océan</titre>
    <lieu>Bretagne</lieu>
    <date>2011</date>
    <auteur id="1"/>
    </photo>
    <photo>
    <titre>Centre ville</titre>
    <lieu>Tokyo</lieu>
    <date>2000</date>
    <auteur id="3"/>
    </photo>
    et auteur.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
     
    <?xml version="1.0"?>
    <auteur id="1">
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    <auteur id="2">
    <nom>Olivier</nom>
    <prenom>Alex</prenom>
    <age>27</age>
    <pays>Suisse</pays>
    </auteur>
    <auteur id="3">
    <nom>Haston</nom>
    <prenom>Mora</prenom>
    <age>33</age>
    <pays>Australie</pays>
    </auteur>
    pour ensuite les combiner et obtenir un fichier équivalent à ablum.xml. Est-ce que c'est possible grâce à XSL ? Si oui, comment faire ensuite pour transformer le résultat obtenu en HTML ? Toujours grâce à XSL ?

    Merci à tous ceux qui pourront me renseigner !

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    La notation XML est naturellement hiérarchique (c'est un arbre !) et il me semblerait plus naturel de n'avoir qu'un seul document avec les livres par auteur pourvu qu'un livre ne puisse pas avoir plusieurs auteurs !

    Sinon, tout mettre dans un même document, mais en deux parties disjointes, est encore intéressant : un document XML est comme une petite base de données cohérente et autonome. Les valeurs d'id n'auraient, alors, qu'à avoir une unicité locale (ce qui pourrait être un problème si la fusion de deux documents à ce format-là venaient à avoir un sens...).

    En fait, avec n documents par type de données, on se demande l'intérêt d'utiliser la notation XML "en rateau" par rapport à du basique CSV.

    XSLT 1.0, lui, ne sait lire qu'un document XML "en entrée", celui sur lequel on applique la transformation. Mais on peut aussi y lire d'autres documents XML à l'aide de la fonction document().

    La génération de HTML avec XSLT est faite avec <xsl:output method="html"> où l'on peut préciser une DTD (HTML5 n'est pas encore supporté...) et un encodage.

    -Alain

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Pour résumer ce qu'à dit Alain :
    C'est possible (en utilisant la fonction document() de XSLT), mais est-ce judicieux étant donné qu'il est possible d'avoir exactement la même structure (que tes 2 documents) dans un seul document ?

    Personnellement j'avoue que je ne sais pas répondre, de toute façon c'est à toi de choisir.
    Tout avoir dans un seul document permettrait d'utiliser le type ID/IDREF de XML (je ne sais pas si c'est géré en multidocuments), de ne pas avoir de nom d'un fichier XML en dur dans le XSL (ce qui est quand même moche) et de tout avoir "sous la main".
    Avoir 2 documents séparés permet de n'avoir qu'un seul type d'information dans le document.

    Après c'est à toi de voir.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci pour votre réponse et les pistes que vous me donnez.

    Le premier fichier XML (album.xml) comprenant à la fois la description des livres et la description des auteurs marche bien, mais j'aurais voulu séparer ces deux types d'informations car je pense que je devrais modifier parfois les informations sur un auteur (changer le nom, ajouter une nouvelle balise).

    Ce genre de modification serait surement plus facile à faire si j'avais deux fichiers XML différents ? Je me vois pas trop modifier les informations sur les auteurs livre par livre ! Ou alors comme vous me dites, dans un seul fichier XML, mais en deux parties disjointes ? Mais concrètement, comme je débute avec XSL, je ne vois pas trop comment recombiner les deux parties correctement dans une transformation en HTML.

    L'idée d'organiser l'information dans un seul fichier XML en fonction des auteurs aurait pu marcher, mais comme vous le dites, ça posera un peu problème lorsqu'il y aura plusieurs auteurs pour un même livre...


    Pour l'instant, en partant des fichiers photo.xml et auteur.xml, j'ai réussi grâce à la fonction document() de XSL à afficher et organiser l'information comme il faut ma transformation en HTML.

    Le problème, c'est qu'une fois que j'ai importé les informations du document auteur.xml avec XSL appliquer à photo.xml, je n'arrive pas à intervenir sur le style comme je voudrais (du genre : gras pour le nom d'auteur, italique pour le pays...). Du coup, l'information est là, mais niveau présentation, c'est pas terrible !

    Mais peut-être que le plus simple dans mon cas serait que je me mette à MySQL et PHP ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci Loceka,

    Je vais creuser la piste ID/IDREF...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    En reprenant l'idée d'un seul fichier XML organisé en deux parties (informations sur les auteurs vs informations sur les oeuvres), j'ai créé le fichier XML 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0"?>
     
    <album>
     
    <artiste>
    	<auteur id="1">
    		<nom>Dupont</nom>
    		<prenom>Pierre</prenom>
    		<age>42</age>
    		<pays>France</pays>
    	</auteur>
    	<auteur id="2">
    		<nom>Olivier</nom>
    		<prenom>Alex</prenom>
    		<age>27</age>
    		<pays>Suisse</pays>
    	</auteur>
    	<auteur id="3">
    		<nom>Haston</nom>
    		<prenom>Mora</prenom>
    		<age>33</age>
    		<pays>Australie</pays>
    	</auteur>
    </artiste>
     
    <oeuvre>
    	<photo>
    		<titre>Lac de montagne</titre>
    		<lieu>Alpes</lieu>
    		<date>2012</date>
    		<auteur idref="1"/>
    	</photo>
    	<photo>
    		<titre>Desert</titre>
    		<lieu>Sahara</lieu>
    		<date>2007</date>
    		<auteur idref="2"/>
    	</photo>
    	<photo>
    		<titre>Ocean</titre>
    		<lieu>Bretagne</lieu>
    		<date>2011</date>
    		<auteur idref="1"/>
    	</photo>
    	<photo>
    		<titre>Centre ville</titre>
    		<lieu>Tokyo</lieu>
    		<date>2000</date>
    		<auteur idref="3"/>
    	</photo>
    </oeuvre>
     
    </album>
    Du coup, j'ai deux questions :

    - Est-ce que c'est bien comme-ça que je peux organiser mes données dans le document XML avec ID/IDREF ?

    - Quelles sont les étapes à suivre ensuite pour réorganiser les données grâce à XSL de manière à avoir une présentation sur ma page web du genre :

    Titre
    Nom Prénom
    Lieu
    Date

    Titre
    Nom Prénom
    Lieu
    Date

    [...]

    J'ai regardé un peu sur différents sites, mais j'ai l'impression qu'il me manque une notion évidente...

  7. #7
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par ApprentiXML Voir le message
    Est-ce que c'est bien comme-ça que je peux organiser mes données dans le document XML avec ID/IDREF ?
    Pas du tout.

    C'est bien ça qu'elle ressembleront mais là tu as de simples attributs.

    Pour typer les attributs il faut ajouter une DTD (ou un XSD) à ton XML.
    C'est dans cette DTD que tu pourras dire que l'attribut auteur/@id est de type ID et que l'attribut auteur/@idref est de type IDREF.
    Tu peux d'ailleurs nommer tes attributs autrement que id et idref, tout ce qui importe est le type définit dans la DTD.

    Après, personnellement je ne me suis jamais servi de cette notion en XSL, mais il te faut utiliser la fonction XPath id(valeurDeLaClef) qui te retournera le noeud possédant cet ID.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    D'accord, alors voici ma DTD :

    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
    <!ELEMENT album (artiste, oeuvre)>
    <!ELEMENT artiste (auteur)>
    <!ELEMENT auteur (nom, prenom, age, pays)>
    <!ATTLIST auteur
    	id ID #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT prenom (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT pays (#PCDATA)>
     
    <!ELEMENT oeuvre (photo)>
    <!ELEMENT photo (titre, lieu, date, auteur)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT lieu (#PCDATA)>
    <!ELEMENT date (#PCDATA)>
    <!ELEMENT auteur EMPTY>
    <!ATTLIST auteur
    	idref IDREF #REQUIRED>

    C'est la première fois que j'en fait une, est-ce que je m'en suis bien sorti ?

    Je vais regarder maintenant la fonction XPath dont tu parles...

    Merci

  9. #9
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Presque.

    Là tu as défini 2 éléments "auteur" et ça, ça ne passera pas.

    Du coup tu as 2 solutions : soit tu crées un seul élément "auteur" qui te servira à la fois à contenir les données et à faire une référence (très moche), soit tu en renommes un des deux.

    Question nommage d'ailleurs, tu devrais faire apparaître clairement dans les noms si c'est une liste d'éléments ou non.
    Par exemple "artistes" et "oeuvres" seraient mieux appropriés que "artiste" et "oeuvre". Et, du coup, dans "artistes" tu pourrais définir un élément "artiste" qui permettrait de définir ce que tu appelles actuellement un "auteur".

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Ah oui, je pensais que ça n'était peut-être pas terrible d'utiliser deux balises <auteur>. J'ai modifier mon fichier XML et ma DTD en suivant tes conseils (j'ai aussi changé les noms pour ID et IDREF)

    Voici, mon nouveau 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?xml version="1.0" standalone="no"?>
    <!DOCTYPE album SYSTEM "album.dtd">
    <?xml-stylesheet type="text/xsl" href="album.xsl"?>
    <album>
     
    <artistes>
    	<artiste class="1">
    		<nom>Dupont</nom>
    		<prenom>Pierre</prenom>
    		<age>42</age>
    		<pays>France</pays>
    	</artiste>
    	<artiste class="2">
    		<nom>Olivier</nom>
    		<prenom>Alex</prenom>
    		<age>27</age>
    		<pays>Suisse</pays>
    	</artiste>
    	<artiste class="3">
    		<nom>Haston</nom>
    		<prenom>Mora</prenom>
    		<age>33</age>
    		<pays>Australie</pays>
    	</artiste>
    </artistes>
     
    <oeuvres>
    	<photo>
    		<titre>Lac de montagne</titre>
    		<lieu>Alpes</lieu>
    		<date>2012</date>
    		<auteur ref="1"/>
    	</photo>
    	<photo>
    		<titre>Desert</titre>
    		<lieu>Sahara</lieu>
    		<date>2007</date>
    		<auteur ref="2"/>
    	</photo>
    	<photo>
    		<titre>Ocean</titre>
    		<lieu>Bretagne</lieu>
    		<date>2011</date>
    		<auteur ref="1"/>
    	</photo>
    	<photo>
    		<titre>Centre ville</titre>
    		<lieu>Tokyo</lieu>
    		<date>2000</date>
    		<auteur idref="3"/>
    	</photo>
    </oeuvres>
     
    </album>
    et la nouvelle DTD qui correspond :

    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
    <!ELEMENT album (artistes, oeuvres)>
    <!ELEMENT artistes (artiste)>
    <!ELEMENT artiste (nom, prenom, age, pays)>
    <!ATTLIST artiste
    	class ID #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT prenom (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT pays (#PCDATA)>
     
    <!ELEMENT oeuvres (photo)>
    <!ELEMENT photo (titre, lieu, date, auteur)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT lieu (#PCDATA)>
    <!ELEMENT date (#PCDATA)>
    <!ELEMENT auteur EMPTY>
    <!ATTLIST auteur
    	ref IDREF #REQUIRED>
    Par contre pour XPath, je sèche ! Je trouve pas en ligne d'exemple qui corresponde à mon cas de figure... Est-ce qu'il a des gens qui ont l'habitude d'utiliser la fonction dont parle Loceka ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Et voici l'ébauche de mon fichier 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" encoding="ISO-8859-1"/> 
     
    <xsl:template match="/">
     
    <html>
     
    <head>
    <title>
    Album Photos
    </title>      
    </head>
     
    <body>
    <xsl:apply-templates select="album/oeuvres"/>
    </body>
     
    </html>
     
    </xsl:template>
     
    <xsl:template match="photo">
    <br/>Titre :
    <b><xsl:apply-templates select="titre" /></b>
    <br/>Date :
    <i><xsl:apply-templates select="date" /></i>
    <br/>Lieu : 
    <xsl:apply-templates select="lieu" /><br/>
    <br/>
    Auteur :
    <br/>
    </xsl:template>
     
    </xsl:stylesheet>
    Ce qui donne, un aspect assez simple dans ce genre :

    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
    Titre : Lac de montagne
    Date : 2012
    Lieu : Alpes
    
    Auteur :
    
    Titre : Desert
    Date : 2007
    Lieu : Sahara
    
    Auteur :
    
    Titre : Ocean
    Date : 2011
    Lieu : Bretagne
    
    Auteur :
    
    Titre : Centre ville
    Date : 2000
    Lieu : Tokyo
    
    Auteur :
    Il me manque donc la maitrise de la fonction id() de XPath pour intégrer les infos sur les auteurs et ensuite leur attribuer un style, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Auteur : Dupont, Pierre (42 ans) France

  12. #12
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ben après c'est pas plus compliquer à gérer en XSL.

    Tu fais un template pour artiste dans lequel tu mets en forme les informations et tu l'appliques sur l'artiste auteur de ta "photo" : <xsl:apply-templates select="id(@ref)"/>.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Aille, aille, aille... je me mélange un peu les pinceaux avec XSL. J'ai essayé d'appliquer ce que tu m'as dit en faisait ça :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" 
     
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" encoding="ISO-8859-1"/> 
     
    <xsl:template match="/">
     
    <html>
     
    <head>
    <title>
    Album Photos
    </title>      
    </head>
     
    <body>
    <xsl:apply-templates select="album"/>
    </body>
     
    </html>
     
    </xsl:template>
     
    <xsl:template match="artistes/artiste">
    <br/>Nom :
    <b><xsl:value-of select="nom"/></b>
    <br/>Prénom :
    <xsl:value-of select="prenom"/>
    <br/>Age :
    <i><xsl:value-of select="age"/></i>
    <br/>Pays:
    <xsl:value-of select="pays"/><br/>
    </xsl:template>
     
    <xsl:template match="oeuvres/photo">
    <br/>Titre :
    <b><xsl:apply-templates select="titre" /></b>
    <br/>Date :
    <i><xsl:apply-templates select="date" /></i>
    <br/>Lieu : 
    <xsl:apply-templates select="lieu" /><br/>
    <br/>
    Auteur : <xsl:apply-templates select="id(@ref)"/>
    <br/>
    </xsl:template>
     
    </xsl:stylesheet>
    Mais, je n'ai surement pas fait ce qu'il faut car ça n'affiche pas les informations sur les auteurs au bon endroit

  14. #14
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Pourtant je ne vois pas d'erreur.

    Tu peux nous montrer ce que tu obtiens et ce que tu voudrais obtenir ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Voici ce que j'obtiens :

    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
    Nom : Dupont
    Prénom : Pierre
    Age : 42
    Pays: France
    
    Nom : Olivier
    Prénom : Alex
    Age : 27
    Pays: Suisse
    
    Nom : Haston
    Prénom : Mora
    Age : 33
    Pays: Australie
    
    Titre : Lac de montagne
    Date : 2012
    Lieu : Alpes
    
    Auteur :
    
    Titre : Desert
    Date : 2007
    Lieu : Sahara
    
    Auteur :
    
    Titre : Ocean
    Date : 2011
    Lieu : Bretagne
    
    Auteur :
    
    Titre : Centre ville
    Date : 2000
    Lieu : Tokyo
    
    Auteur :
    Et voici ce que je cherche à obtenir :

    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
    Titre : Lac de montagne
    Date : 2012
    Lieu : Alpes
    
    Auteur : Nom : Dupont
    Prénom : Pierre
    Age : 42
    Pays: France
    
    Titre : Desert
    Date : 2007
    Lieu : Sahara
    
    Auteur : Nom : Olivier
    Prénom : Alex
    Age : 27
    Pays: Suisse
    
    (...)
    C'est à dire d'abord les informations sur le livre suivies des informations sur l'auteur.

  16. #16
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Bon ben j'avais mal lu, il y'a effectivement des erreurs.

    La première c'est de faire un apply-templates sur album alors qu'en fait tu veux juste afficher les photo.

    Tu dois donc faire un apply-templates sur photo.

    Ensuite, tu essayes de trouver un attribut @ref sur photo alors qu'il est sur le fils auteur de photo.

    En corrigeant ces 2 points ça passe (j'ai testé).

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    D'accord, alors je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="album/oeuvres"/>
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="album/oeuvres/photo"/>
    pour faire afficher seulement les photos.

    Mais pour désigner l'attribut d'un élément fils dans la fonction id(), je ne vois pas comment faire...

  18. #18
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    auteur/@ref

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci beaucoup de m'avoir accompagné dans la mise en place de mes fichiers. Ça fait seulement une petite semaine que j'ai commencé à m'intéresser au XML et je suis parfois un peu long à comprendre

    En faisant les dernières modifications dont tu parles, ça marche à deux conditions :

    - ne pas faire le test avec Firefox (ma version ne prend probablement pas en compte la DTD ?)

    - dans Internet Explorer, ça fonctionne à condition que la valeur des attributs ID et IDREF ne commence pas par un chiffre ??? (j'ai dû changer et mettre des lettres)

    étrange...

    Merci encore

  20. #20
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Firefox ne prend pas en compte les DTD externes pour des raisons de sécurité. Par contre avec une DTD interne, j'ai fait le test et ça marche.

    Pour déclarer une DTD interne il faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <!DOCTYPE album [
      <!-- contenu de la DTD -->
    ]>
    Quant au comportement d'IE, c'est tout à fait normal (pour une fois qu'il se soucie des règles...).
    En XML/SGML il est interdit de faire commencer les attributs de type ID par un caractère numérique (c'est con, mais c'est comme ça).

    Pour être plus précis, voilà les valeurs possibles d'un ID, d'après le W3C (le Name) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NameStartChar	   ::=   	":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
    NameChar	   ::=   	NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
    Name	   ::=   	NameStartChar (NameChar)*
    Si t'as rien compris c'est normal. :grin:
    En gros ça ne peut commencer que par ":", "_" ou une lettre et, après le premier caractère on a en plus le droit de mettre des chiffres, un "." ou un "-".
    Par contre j'ai pas envie de regarder à quoi correspondent les plages Unicode.

Discussions similaires

  1. XSL + XML1 + (XML2 memoire en paramètre)
    Par domiq44 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 01/10/2008, 16h49
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29
  3. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35
  4. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 17h48
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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