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 :

[XSLT] XSLTProccessor::importStylesheet - Problème avec xsl:if (téléchargement du fichier php)


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Points : 99
    Points
    99
    Par défaut [XSLT] XSLTProccessor::importStylesheet - Problème avec xsl:if (téléchargement du fichier php)
    Bonjour à tous,

    je cherche à transformer un fichier xml en XHTML via un fichier xsl en utilisant la classe XSLTProcessor de PHP5. Pour plus de clarté, voici mon fichier 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
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="style.xsl"?>
    <root>
    	<element>
    		<type>unprint</type>
    		<answer>oui</answer>
    	</element>
     
    	<element>
    		<type>unprint</type>
    		<answer>oui</answer>
    	</element>
     
    	<element>
    		<type>print</type>
    		<answer>non</answer>
    	</element>
    </root>
    Avec le fichier style.xsl suivant...

    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
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" indent="yes"/>
    	<xsl:template match="/">	
    		<html xml:lang="fr" lang="fr">
    		<head>
    			<title>Questionnaire Oui</title>				
    		</head>
    		<body>
    			<xsl:apply-templates/>
    		</body>
    		</html>
    	</xsl:template >
    	
    	<xsl:template match="root">
    		<table>
    			<xsl:for-each select="./element">
    			<tr>
    				<td><xsl:value-of select="answer"/></td>				
    			</tr>
    			</xsl:for-each>
    		</table>
    	</xsl:template>
    
    </xsl:stylesheet>
    ... il n'y a aucun probleme. Mon script PHP génère bien mon fichier XHTML. Mais, dès lors que j'ajoute une instruction xsl:if comme ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		<table>
    			<xsl:for-each select="./element">
    			<xsl:if test="type='print'">
    			<tr>
    				<td><xsl:value-of select="answer"/></td>				
    			</tr>
    			</xsl:if>
    			</xsl:for-each>
    		</table>
    ... Mon script ne fonctionne plus, et mon navigateur (Firefox) me demande de télécharger mon fichier php

    Voici mon script php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    	$xsl = new DOMDocument();
    	$xsl->load('style.xsl');
     
    	$xml = new DOMDocument();
    	$xml->load('essai.xml');
     
    	$proc = new XSLTProcessor();
    	$proc->importStylesheet($xsl);
    	echo $proc->transformToXML($xml);
     
    ?>
    Comme aucune erreur ne s'affiche, j'ai tenté de faire un peu de débogage et il semblerait que le problème vienne de la fonction importStylesheet ; mais je n'en sais pas plus.

    Quelqu'un aurait-il une solution à m'apporter, s'il lui plaît ?

    Merci d'avance

    P.S. : petite précision, j'ai vérifié la syntaxe de mon fichier xsl en ouvrant mon fichier xml avec firefox, et tout semble fonctionner correctement.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Hej,

    J'ai testé vite fait ton code, et je n'ai pas le problème que tu cites.
    Fichiers enregistrés en utf8.

    Tu n'aurais pas enregistré tes fichiers avec le bom à tout hasard ?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Points : 99
    Points
    99
    Par défaut
    Tu n'aurais pas enregistré tes fichiers avec le bom à tout hasard ?
    Je ne sais pas ce que tu entends par là...

    J'ai testé sur Chrome, et il me répond que la page est indisponible avec cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error.
    Ce que je trouve le plus bizarre, c'est que ça fonctionne sans problème quand je mets mes balises <xsl:if> entre commentaires ; mais plus quand je les réactive...

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Je n'ai testé qu'avec transformation par php et par FF, tout se déroule correctement.

    Pour le bom, http://fr.wikipedia.org/wiki/Byte_Order_Mark
    Mais peu de chance que cela vienne de ça.

    As-tu testé tes fichiers sans passer par ton serveur, c'est à dire en accédant par file:///urldetonxml dans la barre d'adresse de ton navigateur ?

    Aussi, ta sortie doit s'effectuer en html, et non en xml

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Points : 99
    Points
    99
    Par défaut
    Oui, j'ai testé et tout se passe correctement (sans PHP).

    Par contre, j'ai testé sur un autre serveur, et le script fonctionne correctement. Cela pourrait-il venir de la version du libxslt ?

    Mon serveur (là où ça ne marche pas) :
    • libxslt Version 1.1.8
    • libxslt compiled against libxml Version 2.6.11


    L'autre serveur (là où ça fonctionne) :
    • libxslt Version 1.1.22
    • libxslt compiled against libxml Version 2.6.30


    C'est quand même étrange que XSLTProcessor ne me génère pas une erreur ou un warning ! ça m'aiderait un peu...

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    A-priori, cela viendrait de la version de la lib oui.

    Même si tu avais une erreur, vu que ton xsl est correct, cela serait difficile de la résoudre.

    Peut-être les mots « type » ou « print » qui poserait problème ?
    Je dis sans doute une connerie, mais sait-on jamais.

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Points : 99
    Points
    99
    Par défaut
    J'ai mis à jour XAMPP et mon script fonctionne à nouveau correctement. Je suppose donc que cela venait de la version du xsltlib, ou de PHP lui-même, qui "crashait" lors de l'appel de la fonction importStylesheet().

    Merci beaucoup pour les pistes de réflexion que vous m'avez fournies

    Pour info, j'étais en PHP 5.2.5 et je suis maintenant en PHP 5.3.0

    Bonne continuation à tous !

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

Discussions similaires

  1. Problème avec WebPart de téléchargement de fichier
    Par papouuu dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 16/05/2012, 10h08
  2. [Système] Problème avec compteur de téléchargement
    Par Baptiste Wicht dans le forum Langage
    Réponses: 24
    Dernier message: 24/06/2006, 08h21
  3. Réponses: 7
    Dernier message: 10/06/2006, 14h31
  4. probléme avec xsl
    Par linniesurf dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/02/2006, 23h21
  5. [XSL]problème avec <xsl:when>
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 27/05/2005, 16h54

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