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> </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

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é
