Simplexml

Eléphanteau du PHP | 16 Messages

13 août 2008, 08:35

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?

Mammouth du PHP | 1668 Messages

13 août 2008, 10:43

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
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 16 Messages

13 août 2008, 11:00

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 août 2008, 11:33

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)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 16 Messages

13 août 2008, 12:41

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>

Mammouth du PHP | 1668 Messages

13 août 2008, 12:48

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...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 16 Messages

13 août 2008, 13:04

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)

Mammouth du PHP | 1668 Messages

13 août 2008, 13:48

à 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:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 16 Messages

13 août 2008, 15:30

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: