Page 1 sur 1
php et xml
Posté : 06 juin 2012, 13:01
par damien_55
Bonjour,
J'ai un flux xml avec en entete:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="style2.xsl" ?>
J'utilise simple_xml pour le lire:
Code : Tout sélectionner
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<?php
$channel = simplexml_load_file('fullflux.xml');
foreach ($channel->item as $item) {
print "Titre : {$item->title} <br />\n";
print "Content : {$item->description} <br />\n";
print "Lien : {$item->link} <br />\n";
print "<br /> <br /><br /><br /><br /><br />\n";
}
echo var_dump($channel);
?>
</html>
le var-dump($channel) me retourne: bool(false) ??
Qu'est ce que ça veut dire .?
Merci de votre aide
Re: php et xml
Posté : 06 juin 2012, 13:44
par Ryle
Cela veut dire qu'au lieu d'un objet de type SimpleXMLElement contenant les données du document XML, une erreur est survenue et la fonction simplexml_load_file a retourné la valeur FALSE.
As-tu un avertissement ou un message d'erreur ? Est-ce que le fichier "fullflux.xml" est bien dans le même répertoire que ton script ?
Re: php et xml
Posté : 06 juin 2012, 15:01
par damien_55
bonjour Ryle,
En fait le fullflux.xml est une url externe que j'ai raccourci. Sur firefox, le xml s'affiche trés bien pas de soucis.
Re: php et xml
Posté : 14 juin 2012, 10:23
par damien_55
bonjour a tous,
Je pense sa voir d'ou vient mon problème de retour de variable qui me renvoie:
var_dump($channel) me retourne: bool(false)
En fait dans le flux que je traite, j'ai un <item> comme suit:
Code : Tout sélectionner
<item>
<title>Maison, jardin: Nettoyant façade - 13 Euro</title>
<pubDate>Thu, 14 Jun 2012 01:06:20 +0100</pubDate>
<description>Kristol Façade vendu en litre , par 5L et en 20 L. Nettoyant sans eau pour façades, toitures, terrasses, pierres
Produit de nouvelle génération respectant la pierre. Sa formulation en pH alcalin évite l'attaque des supports calcaires. (pH=13) Enlève les salissures, pollutions atmosphériques, mousses rouges y compris les traces de lichens et autres champignons. Élimine le film statique. Facile à utiliser. Se rince très facilement. Kristol Façade s'utilise pur ou dilué dans de l'eau jusqu'à 50 % : 1 volume de Kristol Façade et 1 volume d'eau. Cela permet de réduire votre coût d'achat par 2. </description>
</item>
Vous remarquerez que dans le champ description, j'ai un
%, je crois donc que c'est ça qui me fait planter mon simple_xml qui se présente comme suit tout simplement:
Code : Tout sélectionner
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<?php
$channel = simplexml_load_file('fullflux.xml');
foreach ($channel->item as $item) {
print "Titre : {$item->title}
\n";
print "Content : {$item->description}
\n";
print "
\n";
}
echo var_dump($channel);
?>
</html>
Comment je peux résoudre ce problème ??
merci de votre aide.
Re: php et xml
Posté : 14 juin 2012, 11:51
par damien_55
Sur un autre fichier, des item avec un % passe mais cette fois ci, c'est dans ces lignes que j'ai un soucis:
Code : Tout sélectionner
<item>
<title>M-349953: Soirées, concerts: Les demi-finales des Feux de la Rampe :14&15 juin</title>
<pubDate>Wed, 06 Jun 2012 12:41:04 +0100</pubDate>
<description>Les Feux de la Rampe 2012 : Les demi-finales cest le 14 et 15 juin ! Les demi-finales se dérouleront le jeudi 14 et le vendredi 15 juin à lAéro à Toulouse à partir de 20h. Les 11 gagnants des concerts de sélections qui saffronteront en demi-finales ont déjà gagné leur place pour le concert de clôture des Feux de la Rampe 2012 au Bikini le 8 novembre prochain. Lors des demi-finales, le public votera à laide de son ticket dentrée et élira 5 groupes qui seront propulsés directement en finale. Le 30 juin aura lieu la dernière étape du tremplin où sera désigné le vainqueur des Feux de la Rampe 2012 ! Le gagnant se verra offrir un contrat de production par le label Sozinho Prod et lenregistrement dun album par le studio Rimshot. Programmation: 14 juin: -Maya (pop electro) -Warren Minute (rock) -Big Bang Bay Bees (rock metal) -LYA (pop rock) -La Compagnie Cuanol (reggae funk) 15 juin : -Earling (rock) -Judie (rock alternatif) -Dysto (Rock français) -Whatever (pop rock) -Strange Brew (rock 60s) -Black Do (reggae funk) Pour les écouter cest ici : http://www.sozinhoprod.com/V2/les-50-groupes-participants/ PAF : 5 Euros START : 20h A LAéro : 170, avenue de Lespinet 31400 TOULOUSE Métro B arrêt Rangueil Ou Bus 68 ou 23 direction Rangueil, arrêt Latécoère SOZINHO PROD - DETONATEUR DE TALENTS www.sozinhoprod.com </description></item>
Bizarre, je ne vois pas comment forcer le simple_xml a prendre le champ tel quel sans interprétation aucune de ce qui se trouve dans les champ (caractères spéciaux ou autre...) ??
Re: php et xml
Posté : 14 juin 2012, 13:43
par Mazarini
Il me semble que les caractères spéciaux comme é, è ou ç sont susceptible de gêner l'interprétation de fichier XML.
Il faut que tu gères les erreurs :
<?PHP
if (!$channel) {
echo "Erreur lors du chargement du XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
Ca te permettra de voir quelles sont les erreurs rencontrées dans le chargement du fichier xml.
Re: php et xml
Posté : 14 juin 2012, 17:30
par damien_55
Voici le code exact pour les erreurs, je crois
<?PHP
libxml_use_internal_errors(true);
if (!$channel) {
echo "Erreur lors du chargement du XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
Et voici ce qu'il me donne comme retour
NULL
Erreur lors du chargement du XML
xmlParseEntityRef: no name
Comment résoudre ça ???
Merci de votre aide.
Re: php et xml
Posté : 14 juin 2012, 18:08
par Mazarini
D'après google, c'est un problème de caractère non conforme dans le texte. Le ç ?
Re: php et xml
Posté : 15 juin 2012, 21:11
par Ryle
J'opterais plutôt pour le "&" dans "Feux de la Rampe :14&15 juin" qui doit normalement marquer le début d'une entité xml (et vu que là, il n'y a rien qui suit, il ne sait pas comment l'interpréter).
Essaye de le remplacer par un & (ou fait appel à htmlentities sur le texte entre les balises si tu génères le xml toi même).
A voir également si un cdata ne permettrait pas d'éviter ce type d'erreur...