Pages :
salut
J'ai un probleme lors de l'affichage de mon fichier xml sur une page html en utilisant biensur un fichier xsl.
le probleme c que dans ma page html il ya selement le premier enregistrement xml les autres ne s'affiche pas.
c koi le probleme??



Voila mon fichier xml :

$include = '<?xml version="1.0"?>'."\n";
$include .= '<bibliotheque>';
$include .= '<livre><titre>1er TITRE</titre><auteur>agata</auteur><ref>ref 234</ref></livre>';
$include .= '<livre><titre>2EME TITRE</titre><auteur>AGTA</auteur><ref>ref 345</ref></livre>';
$include .= '<livre><titre>3EME TITRE</titre><auteur>AGTA</auteur><ref>ref 364</ref></livre>';
$include .= '</bibliotheque>';

Fichier xsl :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<H3>Affichage des enregistrements</H3>
<table width="662" border="1">
<xsl:for-each select="bibliotheque/livre">
<tr>
<td><xsl:value-of select="titre"/></td>
<td><xsl:value-of select="auteur"/></td>
<td><xsl:value-of select="ref"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Pour l affichage j'utilise la class xslt.
Si je mis en commentaire le 3eme enregistrement c bon si non j une l'erreur suivante :

Error 3, Level 0

msgtype : error
code : 4
module : Sablotron
URI : arg:/_xsl
line : 38
msg : cannot open file '...>2EME TITRE</titre><auteur>AGTA</auteur><ref>ref 345</ref></livre><livre><titre>3EME TITRE</titre><auteur>AGTA</auteur><ref>ref 364</ref></livre></bibliotheque>'

Voila
vous avez une idee
Bonjour et bienvenue stekomath,

Merci d'éditer ton message pour présenter ton code entre les balises appropriées ([ code][ /code] sans les espaces) comme spécifié dans Aides/Règles, c'est plus lisible. Smiley biggrin
Je reprends mes 2 fichiers.

Voila mon fichier xml :

$include = '<?xml version="1.0"?>'."\n";
$include .= '<bibliotheque>';
$include .= '<livre><titre>1er TITRE</titre><auteur>agata</auteur><ref>ref 234</ref></livre>';
$include .= '<livre><titre>2EME TITRE</titre><auteur>AGTA</auteur><ref>ref 345</ref></livre>';
$include .= '<livre><titre>3EME TITRE</titre><auteur>AGTA</auteur><ref>ref 364</ref></livre>';
$include .= '</bibliotheque>'; 

et mon fichier xsl :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<H3>Affichage des enregistrements</H3>
<table width="662" border="1">
<xsl:for-each select="bibliotheque/livre">
<tr>
<td><xsl:value-of select="titre"/></td>
<td><xsl:value-of select="auteur"/></td>
<td><xsl:value-of select="ref"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet> 


Voila pour etre claire Smiley cligne
Ta feuille xsl est juste. Il n'y a pas de problème, les 3 lignes du tableaux xml sortent correctement.

C'est certainement dans ton code php qu'il y a un défaut.
Non je n'ai que les 2 premieres ligne qui s'affiche si je met la 3roisieme en commentaire si non il m'affiche l'erreur :

Error 3, Level 0

msgtype : error
code : 4
module : Sablotron
URI : arg:/_xsl
line : 38
msg : cannot open file '...>2EME TITRE</titre><auteur>AGTA</auteur><ref>ref 345</ref></livre><livre><titre>3EME TITRE</titre><auteur>AGTA</auteur><ref>ref 364</ref></livre></bibliotheque>'
Je ne comprends pas non plus; le fichier XML et la feuille XSL semblent corrects.

Question-de-quelqu'un-qui-ne-connaît-rien-à-PHP-et-Sablotron:
Est-ce que cela ne pourrait pas venir d'une longueur de chaîne de caractères trop importante de ta variablie $include Smiley hum ?
Modifié par Gilles (19 Apr 2005 - 17:26)
En tout cas je certifie ton xsl et xml pour les avoir testés sous plusieurs processeurs xslt.
Tu peux également les essayer sous IE6 ou FF pour te rassurer.

Décidément il y a un pb dans ton php.

Si je peux me permettre je conseille l'emploi de la librairie libxslt infiniment plus performante que Sablotron.
Voila mon code :

<? 
 require_once('xsltransfo.class.php');
Function affiche($resultat) {

# Création de l'objet XS
$XS = new xslt($resultat,'biblio2.xsl',true);

# Transformation
$XS->transform();

# Affichage du résultat
echo $XS->output();

}

 //include('fonction.php');
 $include = '<?xml version="1.0"?>'."\n";
$include .= '<bibliotheque>';
$include .= '<livre><titre>1er TITRE</titre><auteur>agata</auteur><ref>ref 234</ref></livre>';
$include .= '<livre><titre>2EME TITRE</titre><auteur>AGTA</auteur><ref>ref 345</ref></livre>';
//$include .= '<livre><titre>3EME TITRE</titre><auteur>AGTA</auteur><ref>ref 364</ref></livre>';
$include .= '</bibliotheque>';


affiche($include);
?>
TriadPtale a écrit :
Libxslt c'est ce qui est utilisé par défaut en php 5 ? avec la classe xsltprocessor ?
Oui c'est tout a fait exact. C'est un bon point supplémentaire, si les développeurs de PHP ont choisi libxslt comme processeur par défaut c'est qu'il doit y avoir une myriade d'autres bonnes raisons de préférer cette librairie.
Pas de problème, une API pour libxml et libxslt est également implémentée pour PHP4, il s'agit de DOM XML et DOM XSLT.
bonjour
Je sais pas comment installer domxml et domxslt.
je suis sous windows j trouvé le fichier php_domxml.dll je l'ai bien installer
mes pas domxslt
C'est un bon début.

Pour terminer il faut dans php.ini :
- préciser le repertoire ou sont logées tes extensions (php_domxml.dll), dans le genre (à adapter à ton install) : extension_dir = "./modules/PHP/extensions/"
- charger l'extension qui t'interesse : extension=php_domxml.dll

[EDIT]si tu es sous windows, tu peux probablement installer php5 en 5 ou 10 minutes[/EDIT]
Modifié par Xavier (20 Apr 2005 - 12:49)
Voila c fait et j'ai l'erreur suivante

Warning: domxml_open_file(): I/O in .\xsltransfo.class.php on line 400

Warning: domxml_open_file(): warning : in .\xsltransfo.class.php on line 400

Warning: domxml_open_file(): failed to load external entity "%3C%3Fxml%20version=%221.0%22%3F%3E%0A%3Cbibliotheque%3E%3Clivre%3E%3Ctitre%3E1er%20TITRE%3C/titre%3E%3Cauteur%3Eagata%3C/auteur%3E%3Cref%3Eref%20234%3C/ref%3E%3C/livre%3E%3Clivre%3E%3Ctitre%3E2EME%20TITRE%3C/titre%3E%3Cauteur%3EAGTA%3C/auteur%3E%3Cref%3Eref%20345%3C/ref%3E%3C/livre%3E%3Clivre%3E%3Ctitre%3Ela%20vie%20nor%3C/titre%3E%3Cauteur%3EAGTA%3C/auteur%3E%3Cref%3Eref%20364%3C/ref%3E%3C/livre%3E%3C/bibliotheque%3E" in .\xsltransfo.class.php on line 400

Warning: process() expects parameter 1 to be object, boolean given in .\xsltransfo.class.php on line 419

Fatal error: Call to a member function on a non-object in .\xsltransfo.class.php on line 431

Modifié par stekomath (20 Apr 2005 - 16:20)
Franchement sans ton code php il est impossible d'interpréter les erreurs.

Quelques lignes de code suffisent pour une transformation XSLT. Voici celui que j'utilise souvent en php4 (avec domxml (libxslt)) :
<?php
//désignation des fichiers utiles
$the_root=$_SERVER["DOCUMENT_ROOT"].'/';		//répertoire racine du serveur
$xml_file = $the_root.'fichier.xml';			// fichier xml de contenu
$xsl_file = $the_root.'fichier.xsl';		// transformation xsl 
// chargement des fichiers
$DomXmlFile = domxml_open_file($xml_file);
$DomXslTrans = domxml_xslt_stylesheet_file($xsl_file);
//paramètres de transformation
//$PARAM['xx']="";
//application de la transformation et envoi à l'internaute
$DomXmlFileResult=$DomXslTrans->process($DomXmlFile,$PARAM);	// le miracle de la transformation XSLT
$XmlFileResult= $DomXmlFileResult->dump_mem(true);		// l'objet DOM devient chaîne
print $XmlFileResult;							// l'internaute reçoit la page
?>

Modifié par Xavier (20 Apr 2005 - 18:54)
j'ai utilisé ton code et c tjrs la meme erreur


Warning: domxml_open_file(): I/O in \test4.php on line 9

Warning: domxml_open_file(): warning : in \test4.php on line 9

Warning: domxml_open_file(): failed to load external entity "exemple.xml" in \test4.php on line 9

Warning: domxml_xslt_stylesheet_file(): I/O in \test4.php on line 10

Warning: domxml_xslt_stylesheet_file(): warning : in \test4.php on line 10

Warning: domxml_xslt_stylesheet_file(): failed to load external entity "exemple.xsl" in \test4.php on line 10

Fatal error: Call to a member function on a non-object in \test4.php on line 16
Smiley fache
salut

Je crois que ca marche maintenant si je met mes deux fichiers xml et xsl dans le repertoire d'apache.
je sais pas s'il y a une variable dans httpd.conf qui me permet de lui indiquer le chemin. Smiley sweatdrop
Pages :