xslt: coud not compile select expression...

Ludoi
Invité n'ayant pas de compte PHPfrance

18 avr. 2007, 15:45

Bonjour à tous!

Je découvre xslt en ce moment et j'ai un petit souci dont je n'arrive pas à sortir:

Code : Tout sélectionner

fichier.xsl ... <xsl:template match="/root"> <test> <xsl:value-of select="/$test"/> </test> </xsl:template> ...

Code : Tout sélectionner

fichier xml: <root> </root>

Code : Tout sélectionner

code php $domxsl = new domDocument(); $domxsl -> load ( 'fichier.xsl' ); $xslt = new XSLTProcessor(); $xslt -> setParameter ( '' , 'test' , 'bonjour' ); $xslt -> importStylesheet( $domxsl ); >> ERREUR!!!!!!!!!!!! >"could not compile select expression '/$test' ...

Quelqu'un a une idée du problème?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2007, 16:25

Le problème c'est que l'expression "/$test" n'est pas valide. (inutile de me remercier, je n'ai fait que traduire le message d'erreur)

Ludoi
Invité n'ayant pas de compte PHPfrance

18 avr. 2007, 17:05

Ah si, je te remercie, c'est toujours bon de connaître le sens des messages d'erreurs ;)

Finalement, mon problème est donc beaucoup plus simple à expliquer: Je n'arrive pas à récupérer la valeur de la variable définie depuis php >>

Code : Tout sélectionner

$xslt->setParameter ( '' , 'test' , 'bonjour' );
Lorsque je fais

Code : Tout sélectionner

<xsl:value-of select="$test"/>
>>> Message d'erreur (celui là, je crois que je l'ai bien compris!):
"Undefined variable: return"

Je me demandais
- si c'est un problème de code invalide ? >> on n'accède pas au paramètres définis depuis php de la manière qu'un paramètre défini dans la feuille de style. Dans ce cas, quel est le code?
- ou un problème de portée des paramètres > (d'où mon '/', je me disais que peut-être, je davais faire une référence type xpath à la racine du document...)

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2007, 17:25

J'avais fait quelques tests il y a un bout de temps et je me rappelle que setParameter était très "contre-intuitif", et je l'avais classé dans les trucs à utiliser uniquement en dernier recours.

Si je peux croire l'exemple donné dans le manuel, tu peux essayer de remplacer ton expression $test par test, sinon je n'ai pas vraiment d'idée. Si ça ne marche pas, essaie de poster une version minimale de ton fichier XSLT et du code PHP qui le transforme.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2007, 17:57

Je viens de refaire quelques tests rapides, voici à quoi je suis arrivé:
<?php

// Document XML vide
$xml = new DOMDocument;

// On crée le document XSL à partir de PHP
$xsl = new DOMDocument;
$xsl->loadXML('<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:output method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

	<xsl:template match="/">
		<html><head><title></title></head><body>

			Contenu de $test : "<xsl:value-of select="$test" />"

		</body></html>
	</xsl:template>

</xsl:stylesheet>');

$xslt = new XSLTProcessor;
$xslt->importStyleSheet($xsl);

$xslt->setParameter(null, 'test', 'Ceci est un texte');

echo $xslt->transformToXML($xml);
À toi de comparer à ton script et modifier en conséquence.

Ludoi
Invité n'ayant pas de compte PHPfrance

18 avr. 2007, 18:45

Merci pour tout, c ok :)

voici l'erreur:

Code : Tout sélectionner

$xslt->setParameter('', 'test', 'Ceci est un texte'); <> $xslt->setParameter([color=red]NULL[/color], 'test', 'Ceci est un texte');
J'avais vu plein d'exemples avec une chaine vide plutôt que NULL. A mon avis, la configuration et/ou version de php doit influer sur la génération d'erreurs dans ce cas. Mais bon, NULL est de toute evidence la "bonne manière" d'utiliser cette methode pour définir un paramètre dans la feuille de style.

Encore merci !