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