Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > XSL & XSLT
XSL & XSLT Forum d'entraide pour les extensions XSL et XSLT permettant de manipuler vos documents XML à l'aide de feuilles de style et de transformations avec PHP. Avant de poster -> tutoriels XSL et XSLT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/06/2005, 16h01   #1
Futur Membre du Club
 
Inscription : octobre 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 67
Points : 19
Points : 19
Par défaut [XSL] Mes entités ne sont pas prises en compte

Bonjour,

J'ai un fichier Cinema.xml dont voici le code:

Code xml :
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 :
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 :
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 :
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 :
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.
trent94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2005, 18h49   #2
Futur Membre du Club
 
Inscription : octobre 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 67
Points : 19
Points : 19
Par défaut [RESOLU]

J'ai résolu mon problème, il fallait utiliser la propriété substituteEntities pour que le parseur prenne en compte les entités.


Code :
1
2
3
4
5
 
#chargement du fichier XML: 
$proc_xml = new DomDocument(); 
$proc_xml->substituteEntities = true;
$proc_xml->load($docXML);
OK.

Lionel.
trent94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h38.


 
 
 
 
Partenaires

Hébergement Web