Bonjour,
J'ai un fichier Cinema.xml dont voici le code:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE CINEMA [ <!ENTITY salle1 SYSTEM "Salle1.xml"> <!ENTITY salle2 SYSTEM "Salle2.xml"> ]> <CINEMA> <NOM>Les navires</NOM> <ADRESSE>Rue près de la gare de Valence</ADRESSE> <METRO>Métro esplanade gare</METRO> &salle1; &salle2; </CINEMA>
Puis les deux fichiers Salle1.xml et Salle2.xml correspondant aux entités de cinema.xml dont voici le code :
Salle1.xml:
Code xml : 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" encoding="ISO-8859-1"?> <SALLE NO='1' PLACES='320'> <FILM> <TITRE>Batman Begins</TITRE> <AUTEUR>Christopher Nolan</AUTEUR> <GENRE>Action aventure</GENRE> <ANNEE>2005</ANNEE> <PAYS>Etats-unis</PAYS> <RESUME>Le résumé de Batman Begins.</RESUME> </FILM> <REMARQUE>Réservation conseillée.</REMARQUE> <REMARQUE>Attention la marche.</REMARQUE> <SEANCES> <SEANCE>14:00</SEANCE> <SEANCE>16:00</SEANCE> <SEANCE>21:00</SEANCE> </SEANCES> </SALLE>
Salle2.xml :
Code xml : 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 <?xml version="1.0" encoding="ISO-8859-1"?> <SALLE NO='2' PLACES='120'> <FILM> <TITRE>Star Wars III : The Revenge of Sith</TITRE> <AUTEUR>George Lucas</AUTEUR> <GENRE>Action aventure</GENRE> <ANNEE>2005</ANNEE> <PAYS>Etats-unis</PAYS> <RESUME>Comment Anakin Skywalker bascule du côté obscur.</RESUME> </FILM> <SEANCES> <SEANCE>08:00</SEANCE> <SEANCE>10:00</SEANCE> <SEANCE>12:00</SEANCE> </SEANCES> </SALLE>
Puis le document Cinema.xsl dont le code :
Code xml : 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 <?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"/> <xsl:template match="/"> <html> <head> <title>Cinema : <xsl:value-of select="CINEMA/NOM"/></title> </head> <body bgcolor="white"> <xsl:apply-templates select="CINEMA"/> </body> </html> </xsl:template> <xsl:template match="CINEMA"> <h1> <xsl:value-of select="NOM"/> </h1> <h1> <xsl:value-of select="ADRESSE"/> </h1> <h1> <xsl:value-of select="METRO"/> </h1> <xsl:apply-templates select="SALLE"/> </xsl:template> <xsl:template match="SALLE"> <h2>Salle N° :<xsl:value-of select="@NO"/></h2> <h2>NbPlaces :<xsl:value-of select="@PLACES"/></h2> <!-- Film --> <h3>Film : <a href="{FILM/TITRE}XML.html"><xsl:value-of select="FILM/TITRE"/></a> </h3> de <b><xsl:value-of select="FILM/AUTEUR"/></b> <br/><i><xsl:value-of select="FILM/PAYS"/></i>,(<xsl:value-of select="FILM/ANNEE"/>) <br/>Resumé:<xsl:value-of select="FILM/RESUME"/> <!-- boucle sur les séances --> <h3>Séances :</h3> <ol> <xsl:for-each select="SEANCES/SEANCE"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ol> <xsl:for-each select="REMARQUE"> <font color="red"><xsl:value-of select="."/></font> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Puis le fichier Cinema.php :
###########################
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 <? $docXSL = 'Cinema.xsl'; $docXML = 'Cinema.xml'; if ( phpversion() <= '5.0.0') die('PHP5 non détecté !'); else #utilisation du processeur DOM-XML { #chargement du fichier XSL: $proc_xsl = new DomDocument(); $proc_xsl->load( $docXSL ); #chargement du fichier XML: $proc_xml = new DomDocument(); $proc_xml->load($docXML); #processeur XSLT: $xslt = new XsltProcessor(); $xslt->importStylesheet($proc_xsl); $obj = $xslt->transformToDoc($proc_xml); $output = $obj->saveXML(); }; echo $output; ?>
J'utilise la version PHP 5.0.4 et la dll php_xsl.dll
Et bien lorsque j'exécute mon fichier Cinema.php et bien je n'ai aucune erreur mais les deux entités (salle1 et salle2) ne sont pas prises en compte.
Savez vous si c'est un comprortement connu?
On dirait que Cinema.xsl s'applique sur Cinema.xml avant que Cinema.xml ait chargé les deux entités salle1 et salle2.
Merci pour votre aide.
Lionel.
Partager