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

Bibliothèques et frameworks PHP Discussion :

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


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 70
    Points : 52
    Points
    52
    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 : 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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 70
    Points : 52
    Points
    52
    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 : 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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/03/2011, 17h52
  2. linux : Les changements sur mes modules ne sont pas prix en compte
    Par pylearner dans le forum Général Python
    Réponses: 7
    Dernier message: 09/11/2010, 11h12
  3. mes VirtualHost ne sont pas pris en compte
    Par ProgVal dans le forum Apache
    Réponses: 2
    Dernier message: 31/12/2008, 17h37
  4. Réponses: 1
    Dernier message: 11/04/2007, 16h11
  5. Les limites ne sont pas prises en compte
    Par Atamix dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2006, 12h41

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