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

XSL/XSLT/XPATH XML Discussion :

erreur avec XSLT et PHP (XSLTProcessor)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut erreur avec XSLT et PHP (XSLTProcessor)
    Bonjour,
    Je suis plus que novice en XSLT et je bloque d'ailleurs des le depart.
    J'ai repris l'exemple http://www.developpez.biz/downloads/...rs-xml-xls.pdf au debut tout roule puis quand j'essaie d'ajouter la condition <xsl:if test=".[artiste='Johnny']"> blablabla </xsl:if> le coco s'emballe et me dit:

    XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: Invalid expression in C:\wamp\www\xslt\xslt.php on line 19
    XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error: file file:///C:/wamp/www/xslt/xslt.xsl line 15 element if in C:\wamp\www\xslt\xslt.php on line 19
    XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:if : could not compile test expression '.[artiste='Johnny']' in C:\wamp\www\xslt\xslt.php on line 19
    XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: No stylesheet associated to this object in C:\wamp\www\xslt\xslt.php on line 20
    Je travaille avec wamp, j'ai bien coche l'extension PHP_xsl.
    J'ai ceci dans phpinfo:
    XSL enabled
    libxslt Version 1.1.23
    libxslt compiled against libxml Version 2.6.32
    EXSLT enabled
    libexslt Version 0.8.13


    Voici mes codes:

    xslt.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    	$XmlData = "liste.xml";
    	$XslData = "xslt.xsl";
     
    	$doc = new DOMDocument();
    	$xsl = new XSLTProcessor();
     
    	$doc->load($XslData);
    	$xsl->importStyleSheet($doc);
     
    	$doc->load($XmlData);
    	echo $xsl->transformToXML($doc);
    ?>

    liste.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
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
     
     <compilation>
    	<mp3>
    		<titre>Foule sentimentale</titre>
    		<artiste>Alain Souchon</artiste>
    	</mp3>
    	<mp3>
    		<titre>I ve got that tune</titre>
    		<artiste>Chinese man</artiste>
    	</mp3>
    	<mp3>
    		<titre>Les etoiles filantes</titre>
    		<artiste>Les cowboys fringants</artiste>
    	</mp3>
    	<mp3>
    		<titre>Insane the brain</titre>
    		<artiste>Cypress Hill</artiste>
    	</mp3>
    	<mp3>
    		<titre>Allumer le feu</titre>
    		<artiste>Johnny</artiste>
    	</mp3>
    </compilation>

    xslt.xsl:

    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
    <?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"  encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
    <xsl:template match="/">
    <html><body>
    	<p>OPOPOP </p>
    	<table border="1" cellspacing="0" cellpadding="3">
    		<tr bgcolor="#FFFF00">
    			<td>Titre</td>
    			<td>Artiste</td>
    		</tr>
    		<xsl:for-each select="compilation/mp3">
    					<xsl:if test=".[artiste='Johnny']">
    				<tr>
    					<td><xsl:value-of select="titre"/></td>
    					<td><xsl:value-of select="artiste"/></td>
    				</tr>				
    			</xsl:if>
    		</xsl:for-each>
    	</table>
    </body></html>
    </xsl:template>
    </xsl:stylesheet>

    Un grand, grand merci d'avance

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    en fait, je ne comprends ce que tu veux avec ton code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:for-each select="compilation/mp3[artiste='Alain Souchon']">
    					<xsl:if test=".[artiste='Johnny']">
    				<tr>
    					<td><xsl:value-of select="titre"/></td>
    					<td><xsl:value-of select="artiste"/></td>
    				</tr>				
    			</xsl:if>
    		</xsl:for-each>
    Et ca <xsl:if test=".[artiste='Johnny']"> ne peut pas fonctionner,
    à la limite quelque chose comme <xsl:if test="artiste='Johnny'"> ?

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup, je cherche 'a afficher les chansons de Johnny dans le tableau, j'ai repris l'exemple du tuto
    La balise <xsl:if> ... </xsl:if> permet d'effectuer un choix dans les données du fichier XML. On
    ajoutera l'attribut match où l'on indique l'élément choisi. Ce qui en résumé donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if match=".[balise='xxx']">
                balises Html
    </xsl:if>

    donc <xsl:if match=".[artiste='Johnny']">, j'ai aussi (un peu betement, je teste) remplace "match" par "test" mais j'ai toujours la meme erreur.

    En essayant avec ta suggestion les chansons de Johnny ne s'affichent pas.

    Et quel est le rapport avec la fonction XSLTprocessor, dans mon erreur?

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    Je vois un peu partout que XSLT est rendu obsolète avec PHP5, est ce que vous savez si ça signifie qu'il n'est pas compatible, et ça expliquerait que je ne puisse plus utiliser XSLTProcessor par exemple?
    Si c'est le cas, est ce que vous connaissez une alternative 'a XSLT (avec du PHP)?

  5. #5
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bon ok c'est déjà plus clair
    Pour récupérer les chansons de Johnny, tu remplace "Alain Souchon" par "Johnny".

    Je vois un peu partout que XSLT est rendu obsolète avec PHP5
    Je n'étais pas au courant ! Il faut tout de même savoir que ce sont deux langages différents. Il me semblerais plutôt que PHP a besoin du XSLT et non l'inverse.

    est ce que vous savez si ça signifie qu'il n'est pas compatible
    Tout dépends du processeur que tu utilise ... et donc aussi de ta configuration PHP.

    est ce que vous connaissez une alternative 'a XSLT (avec du PHP)?
    Tout dépends de ce tu compte faire, mais à priori non.

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    ok je crois que j'ai fait n'importe quoi je suis un peu perdue avec toutes les nouvelles notions, merci!

    par contre je n'ai toujours pas compris pourquoi l'exemple du tuto <xsl:if match=".[artiste='Johnny']"> ne fonctionnait pas et produisait cette etrange erreur?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		<xsl:for-each select="compilation/mp3">
     
    			<xsl:when test=".[artiste='Johnny']">
     
    				<tr>
    					<td><xsl:value-of select="titre"/></td>
    					<td><xsl:value-of select="artiste"/></td>
    				</tr>
     
    			</xsl:when>
     
     
    		</xsl:for-each>
    qu'est ce qui n'est pas correct la dedans?

    et <xsl:when test="artiste='Johnny'"> ne fonctionne d'ailleurs pas non plus

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    [1] Je vois tantôt ceci <xsl:if test="etc etc"> et tantôt cela <xsl:if match="etc etc">. Soyez sûre, c'est <xsl:if test="etc etc"> avec un attribut test; mais avec un attribut match?... jamais.

    [2]
    par contre je n'ai toujours pas compris pourquoi l'exemple du tuto <xsl:if match=".[artiste='Johnny']"> ne fonctionnait pas et produisait cette etrange erreur?
    C'est un point d'aberration de la recommendation de l'XPath qui fait surprise pour des professionnels de longue expérience dans xml pour ne pas dire aux débuttants. Je dis que c'est une aberration parce que ça n'a pas une raison écrasante pour cet état d'affaires: il n'est pas permis de mettre quelque prédicat que ce soit immédiatement après une "étape" (au sens d'"xpath") qui soit au format d'abréviation comme '.' au sens de self::node() ou '..' au sens de parent::node(). Par exemples...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:if test=".[artiste='Johnny']"> <!-- etc (ça ne va pas)  --> </xsl:if>
    <xsl:if test="self::node()[artiste='Johnny']"> <!-- etc (ça va)  --> </xsl:if>
    <xsl:if test="self::*[artiste='Johnny']"> <!-- etc (ça va)  --> </xsl:if>
    <xsl:if test="self::mp3[artiste='Johnny']"> <!-- etc (ça va)  --> </xsl:if>
    Je ne dirais pas les expressions de "test" font beaucoup de sens, mais elles illustrent le point. Il s'en faut resulter comme ça pour conformer à la recommendation.

    [3]
    Je vois un peu partout que XSLT est rendu obsolète avec PHP5
    Alors là je ne sais quoi dire. Pouvez-vous donner une/des page(s) qui font conclusions à cet effet?

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par getrude Voir le message
    et <xsl:when test="artiste='Johnny'"> ne fonctionne d'ailleurs pas non plus
    Mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="artiste = 'Johnny'">
    fonctionne parfaitement, par contre. Pourquoi chercher des syntaxes aussi compliquées ?

  9. #9
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup.
    Concernant la syntaxe, je suivais simplement le tuto, je n'ai pas cherche midi 'a 14h...

    http://82.157.70.109/mirrorbooks/php...9lev1sec5.html
    (et par ailleurs, "I figured out that it wasn't actually the wamp installation that was the problem, it was in fact my script. If you're using wamp with PHP 5+ the syntax for transforming XML with XSL has completely changed." et autres exemples commencaient 'a me faire penser que plus rien n'etait 'a jour)

    Je pense que mon manque total de connaissances me fait comprendre les choses de travers, mais j'apprends!

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    [3.1] J'espère que vous seriez d'accord qu'il s'agit le support d'XSLT php5 vs php4. C'est donc complètement d'autre chose qu'ils parlent.

    [2.1]
    Concernant la syntaxe, je suivais simplement le tuto
    Je viens d'avoir une occasion de voir quoi qu'il s'agit.
    Effectivement, ça y est figuré. Comme j'ai dit, les expressions figurées là à plusieurs reprises sont doublement érronées, à deux égards. J'aimerais voir l'un des modérateurs prendrant la peine de notifier l'auteur. De les corriger serait util pour un tuto déjà bien fait. (Pourtant, il serait plus difficile pour moi de le faire notifier.)

  11. #11
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    Bonne idée en effet!

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/04/2015, 23h16
  2. Génération de HTML avec XSLT et PHP
    Par philippe6 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/02/2014, 10h33
  3. Erreur avec perl et php dans le répertoire cgi-bin
    Par Francky033 dans le forum Web
    Réponses: 2
    Dernier message: 26/02/2010, 18h13
  4. [XSLT] erreur avec les fonctions
    Par frouge dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 18/07/2006, 10h15
  5. [Forum] Des erreurs avec tous les scripts PHP
    Par sensoo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 25/04/2006, 18h41

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