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 c’est le 14 et 15 juin ! Les demi-finales se dérouleront le jeudi 14 et le vendredi 15 juin à l’Aéro à Toulouse à partir de 20h. Les 11 gagnants des concerts de sélections qui s’affronteront 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 à l’aide de son ticket d’entré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 l’enregistrement d’un 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 60’s) -Black Do’ (reggae funk) Pour les écouter c’est ici : http://www.sozinhoprod.com/V2/les-50-groupes-participants/ PAF : 5 Euros START : 20h A L’Aé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...