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] [ID & IDREF] problème d'utilisation


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut [XSLT] [ID & IDREF] problème d'utilisation
    Bonjour tout le monde,

    Je tombe sur un problème que malheureusement je n'arrive pas à résoudre, pour mon évaluation XML ( cours ) je doit créer une dvdtheque ( DTD + XML + XSL(T) )

    Mon problème est que je n'arrive pas à récupérer un élément par rapport à son id, hummmmm pas très clair peut-être

    Voici ma DTD
    dvdtheque.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <!ELEMENT dvdtheque (films*,genre*,acteurs*,realisateurs*,nationalite*,disponibilite*)>
      <!-- Noeud des films -->
      <!ELEMENT films(titre,genre*,acteur*,realisateur*,dispo*,synopsis)>
        <!ATTLIST films idfilm CDATA #REQUIRED>
        <!ELEMENT titre (#PCDATA) #REQUIRED>
          <!ATTLIST titre annee CDATA #REQUIRED>
          <!ATTLIST titre duree CDATA #REQUIRED>
        <!ELEMENT genre EMPTY>
          <!ATTLIST genre idgenre IDREF #REQUIRED>
        <!ELEMENT acteur EMPTY>
          <!ATTLIST acteur idact IDREF #REQUIRED>
        <!ELEMENT realisateur EMPTY>
          <!ATTLIST realisateur idreal IDREF #REQUIRED>
        <!ELEMENT dispo EMPTY>
          <!ATTLIST dispo iddispo IDREF #REQUIRED>
        <!ELEMENT synopsis (#PCDATA) #REQUIRED>
        <!-- Noeud des genres -->
        <!ELEMENT genres (nomg)>
          <!ATTLIST genres idrefgenre ID #REQUIRED>
          <!ELEMENT nomg (#PCDATA) #REQUIRED>
        <!-- Noeud des acteurs -->
        <!ELEMENT acteurs (noma)>
          <!ATTLIST acteurs idrefact ID #REQUIRED>
          <!ELEMENT noma (#PCDATA) #REQUIRED>
        <!-- Noeud des realisateurs -->
        <!ELEMENT realisateurs (nomr)>
          <!ATTLIST realisateurs idrefreal ID #REQUIRED>
          <!ELEMENT nomr (#PCDATA) #REQUIRED>
        <!-- Noeud des nationalités -->
        <!ELEMENT nationalites (nomn)>
          <!ATTLIST nationalites idrefnat ID #REQUIRED>
          <!ELEMENT nomn (#PCDATA) #REQUIRED>
        <!-- Noeud des nationalité -->
        <!ELEMENT disponibilites (nomd)>
          <!ATTLIST disponibilites idrefdispo ID #REQUIRED>
          <!ELEMENT nomd (#PCDATA) #REQUIRED>
    jusque là je pense que ma DTD est correct je définit bien les ID et les IDREF ?

    Maintenant le XML
    dvdtheque.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="dvdtheque.xsl"?>
    <!DOCTYPE dvdtheque SYSTEM "dvdtheque.dtd">
    <dvdtheque>
      <films idfilm="1">
        <titre annee="1994" duree="2H40">Titre 1</titre>
        <genre idgenre="g1"/>
        <acteur idact="a1"/>
        <realisateur idreal="r1"/>
        <dispo iddispo="d1"/>
        <synopsis>Premier synopsis</synopsis>
      </films>
     
     
    <genres idrefgenre="g1">
      <nomg>Action</nomg>
    </genres>
     
    <acteur idrefact="a1">
      <noma>Acteur1</noma>
    </acteur>
     
    <realisateurs idrefreal="r1">
      <nomr>Réalisateur 1</nomr>
    </realisateurs>
     
    <nationalites idrefnat="n1">
      <nomn>Nationalite 1</nomn>
    </nationalites>
     
    <disponibilites idrefdispo="d1">
      <nomd>Dispo ici et là</nomd>
    </disponibilites>
    </dvdtheque>
    ici mes idact etc... font bien référence au acteur et autre, et voici le XSL
    dvdtheque.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
      <html>
      <head>
        <title>Dvdthèque</title>
      </head>
      <body>
        <xsl:for-each select="dvdtheque/films">
          <xsl:value-of select="titre"/><br/>
          <xsl:for-each select="acteur">
           <xsl:value-of select="id(./@idact)/noma"/><br/>
          </xsl:for-each>
        </xsl:for-each>
      </body>
      </html>
      </xsl:template>
    </xsl:stylesheet>
    Vous remarquerez aucune mise en page je cherche juste à l'afficher, dans ce XSL le titre s'affiche correctement ( normale je fait la boucle sur les films )
    ensuite j'effectue une boucle sur acteur en lui demandant de m'envoyer l'element noma de l'identifiant a1
    mais rien impossible d'afficher l'acteur

    Si quelqu'un à du temps à me consacrer pour comprendre ou est mon erreur, car je suppose que c'est une erreur de ma part

    d'avance merci de votre aide

  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,

    ton code XSLT et ta DTD me semblent corrects, par contre il y a un impératif pour que id() fonctionne, il faut que ton parseur XML soit validant. Si tu utilises Internet Explorer pour tester ton code, il faut savoir que la validation DTD est désactivée par le parseur utilisé par IE (MSXML) et que la DTD n'est pas prise en compte. C'est également le cas de la plupart des autres parseurs, la validation étant une opération gourmande en ressources elle n'est pas active par défaut.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Merci pour votre réponse, alors en faites, il y'avait plusieur petites fautes

    maintenant celà fonctionne sous IE mais pas sous FF :s
    manquait des S dans la première séries d'élément de la DTD et un s au différent noeud acteurs

    Donc problème presque réolu, me reste plus qu'a le rendre compatible FF

    d'avance encore merci de votre aide

Discussions similaires

  1. Probléme d'utilisation du order-by (XSLT/XML)
    Par lastico21000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/11/2011, 11h28
  2. [XSLT]Problème d'utilisation de XSL avec fichier GPX.
    Par robiwan dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/05/2010, 14h17
  3. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

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