Page 1 sur 1

Simplexml

Posté : 13 août 2008, 08:35
par franzy51
Bonjour,
j'essai d'afficher un ensemble xml+xsl dans une page php.
j'ai mis ce code

Code : Tout sélectionner

<?php // Le fichier test.xml contient un document XML avec un élément racine // et au moins un élément /[racine]/title. if (file_exists('dossier.xml')) { $xml = simplexml_load_file('dossier.xml'); print_r($xml); } else { exit('Echec lors de l\'ouverture du fichier test.xml.'); } ?>
Il ne prend en compte xsl, comment dois-je faire qu'il le prenne en compte?

Posté : 13 août 2008, 10:43
par katagoto
Avant tu dois stipuler ce header :
Header("content-type: application/xml"); 
Et, tu dois bien avoir spécifié la feuille de style dans ton fichier xml

Posté : 13 août 2008, 11:00
par franzy51
tout d'abord merci pour la réponse,
donc si je comprends bien je met ce code

Code : Tout sélectionner

<?php header("content-type: application/xml"); if (file_exists('dossier.xml')) { $xml = simplexml_load_file('dossier.xml'); print_r($xml); } else { exit('Echec lors de l\'ouverture du fichier test.xml.'); } ?>
lechemin du fichier xsl est bien spécifié dans mon fichier xml,
mais la cela ne fonctionne pas

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/netoupasnet.net/htdocs/fluxxmldvd/test1.php:8) in /var/www/virtual/netoupasnet.net/htdocs/fluxxmldvd/test1.php on line 76 Echec lors de l'ouverture du fichier test.xml.

Posté : 13 août 2008, 11:33
par zeus
Enlève tout espace, saut de ligne, tabulation, ... entre le début du fichier et la balise <?php

Sinon, c'est considéré comme l'envoi de contenu au navigateur, et le header() ne peut plus être utilisé après l'envoi d'informations au navigateur (c'est ton message d'erreur)

Posté : 13 août 2008, 12:41
par franzy51
j'ai fait un fichier test.php(http://www.netoupasnet.net/fluxxmldvd/test2.php

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans titre</title> </head> <body> <?php header("content-type: application/xml"); $file = "famille.xml"; $fp = fopen($file, "r"); $return = fread($fp, filesize($file)); fclose($fp); echo $return; ?> </body> </html>
toujours une erreur


mon fichier xml

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="../fluxxmldvd/demo.xsl"?> - <products> - <product> <name>ddd</name> <productUrl>http://xxxx</productUrl> <imageUrl>http://www.xxxx(fichier image)</imageUrl> <description>decrire le type</description> <price>1.00</price> <currency>EUR</currency> <TDProductId>n° de produit</TDProductId> <TDCategoryID>522</TDCategoryID> <TDCategoryName>famille</TDCategoryName> <merchantCategoryName>peu importe</merchantCategoryName> <programName>prog</programName> <programLogoPath>logopart</programLogoPath> <programId>n°</programId> - <fields> <cast>avec : tel ou tel</cast> <country>USA</country> </fields> </product> ?>
mon fichier xsl

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="famille.xml" --> <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 XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <title>Untitled Document</title> </head> <body> <table width="100%"> <xsl:for-each select="products/product"> <tr> <td rowspan="2"><img> <xsl:attribute name="src"> <xsl:value-of select="imageUrl" /> </xsl:attribute> </img> </td> <td colspan="2"><xsl:value-of select="name"/></td> </tr> <tr> <td colspan="2"><xsl:value-of select="description"/></td> </tr> <tr> <td><img> <xsl:attribute name="src"> <xsl:value-of select="programLogoPath" /> </xsl:attribute> </img></td> <td><xsl:value-of select="price"/>€</td> <td><a href="{productUrl}" target="_blank">Achetez maintenat</a></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Posté : 13 août 2008, 12:48
par katagoto
fais un copier collé de ce code, réfléchit pas ^^ :
<?php 
header("content-type: application/xml");
echo file_get_contents ("famille.xml"); // Remplace famille.xml par le fichier xml que tu tente d'afficher
?>
Je t'explique : le header() indique au navigateur que tu tente de lui envoyer du xml, file_get_contents() récupère le contenu de famille.xml sous forme de chaine, echo envois ton fichier au navigateur, ton navigateur interprête...

Posté : 13 août 2008, 13:04
par franzy51
Ok merci,
mon problème est que je voudrai que cela s'affiche dans une page php qui existe déjà.
si je fait une page test.php comme ça:

Code : Tout sélectionner

<?php header("content-type: application/xml"); echo file_get_contents ("famille.xml"); // Remplace famille.xml par le fichier xml que tu tente d'afficher ?>
par contre si je veux l'inclure dans une page php de style:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Net ou pas net, VOD</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="../style.css" type="text/css" charset="iso-8859-1" /> </head> <body> <div id="wrapper"> <h1><SCRIPT LANGUAGE=JavaScript><!-- var dDate = new Date() ; var Jours = new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi") ; var Mois = new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"); document.write(Jours[dDate.getDay()] + " " + dDate.getDate() + " " + Mois[dDate.getMonth()] + " " + dDate.getFullYear()) ; //--></SCRIPT>&nbsp;</h1> <div id="top-nav"> <ul> <?php include "../include/menuhaut.php";?> </ul> </div> <div id="mmagic"> </div> <div id="header"> </div> <div id="spacer"> </div> <div id="body"> <div id="left"> <div id="nav"> <ul> <?php include "../include/menu.php";?> </ul> <div class="clear"> </div> </div> <div id="visit"> <h2>Net ou pas net...</h2> <p>Bienvenue sur net ou pas net.</p> <p>. </p> </div> <div id="subs"> <div id="subs-left"> <?php header("content-type: application/xml"); echo file_get_contents ("famille.xml"); ?> </div> </div> </div> <div id="right"> <div id="right-i"> <h2>Net ou pas net</h2> <p><div align="center">pub verticale</a> </div>  </p> </div> </div> <div class="clear"> </div> </div> <div id="copyright"> <?php include "../include/copyright.php";?> </div> </div> </body> </html>
parce que j'ai déjà créé du html(enfin je pense)

Posté : 13 août 2008, 13:48
par katagoto
à ce moment là, php à une fonction sympas : [urlhttp://fr3.php.net/manual/fr/function.xslt-process.php]xslt_process()[/url]

C'est marrant de s'en servir, tu verra, enfin je dis ça, je dis rien :roll:

Posté : 13 août 2008, 15:30
par franzy51
j'ai essayé cela:

Code : Tout sélectionner

<?php $XmlData = "famille.xml"; $XslData = "demo.xsl"; $doc = new DOMDocument(); $xsl = new XSLTProcessor(); $doc->load($XslData); $xsl->importStyleSheet($doc); $doc->load($XmlData); echo $xsl->transformToXML($doc); ?>
cela me renvoie une erreur:

Code : Tout sélectionner

Fatal error: Class 'XSLTProcessor' not found in /var/www/virtual/netoupasnet.net/htdocs/fluxxmldvd/test2.php on line 5
Donc me voici toujours bloqué :lol: