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

Bibliothèques et frameworks PHP Discussion :

[XSL] Mes entités ne sont pas prises en compte


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    [XSL] Mes entités ne sont pas prises en compte
    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<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sl="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.

  2. #2
    Membre du Club
    [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 :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #chargement du fichier XML: 
    $proc_xml = new DomDocument(); 
    $proc_xml->substituteEntities = true;
    $proc_xml->load($docXML);


    OK.

    Lionel.

###raw>template_hook.ano_emploi###