Loupilo Posté 5 Mai 2006 Posté 5 Mai 2006 Salut, J'utilise simpleXML pour extraire les données (du flux d'Amazon ). Seulement, ça ne marche pas. J'ouvre mon fichier comme cela : $fp = simplexml_load_file($url); et le fichier ressemble à celui-là. Et une instruction simple comme $fp->Author; ne me donne... rien La chaîne reste vide. Et pourtant, le fichier a bien été ouvert, si je l'affiche avec echo $fp->asXML(); je l'obtiens bien avec tous ses éléments... Une idée sur la provenance du problème ? Merci Loupilo.
TheRec Posté 5 Mai 2006 Posté 5 Mai 2006 Bonsoir, Le mappage de l'objet créé lorsque tu invoques simplexml_load_file est fait en fonction du fichier XML...l'objet reflète donc la hiérarchie du fichier XML ... tu as accès à "ItemAttributes" de ton "Item" nommé "Author" avec ceci : <?php echo $fp->Items->Item->ItemAttributes->Author; ?> Tu peux observer la structure une fois le mappage effectué avec ces 3 lignes (affichée dans un fichier HTML) : echo "<pre>"; print_r($fp); echo "</pre>"; Après avoir invoqué simplexml_load_file bien entendu... ou simplement en regardant la structure de ton fichier XML
Loupilo Posté 5 Mai 2006 Auteur Posté 5 Mai 2006 J'avais essayé ça, mais le Items m'était passé sous le nez Merci de nouveau. Mais si je fais : $racine = $fp->Items->Item->ItemAttributes; est-ce que je pourrais accéder à Author en faisant simplement : $racine->Author ? En tout cas, j'apprécie beaucoup ton aide Loupilo.
TheRec Posté 5 Mai 2006 Posté 5 Mai 2006 Oui... bien entendu, lorsque tu utilises l'opérateur d'affectation = PHP ne se contente pas d'attribuer une valeur...si c'est un objet il l'attribuera en entier, de même pour les tableaux ou toutes autres structures / données. Le code que tu propose est tout à fait correct ! P.S. : L'explication de l'utilisation des objet en PHP.
Loupilo Posté 5 Mai 2006 Auteur Posté 5 Mai 2006 Effectivement, tout fonctionne. C'est tout de même bien plus pratique que mon parseur bourrin, fonctionnant à l'aide de switch et de xml_parse ! Merci TheRec... Ça fonctionne du tonnerre : on entre l'ISBN, et (avec de l'AJAX, évidemment ) les infos du livre sont trouvées toutes seules. Mais il reste du boulot... allez, courage.
TheRec Posté 5 Mai 2006 Posté 5 Mai 2006 De rien ! Bonne chance pour la suite. Si des fois le tout devient visible un de ces jours, n'hésite pas à "nous" montrer un lien...je suis sûre que le système devrait intéresser du monde, dont Arlette qui a déjà dit que ça l'intéressait Et si t'as d'autre problème, bien évidemment le Hub est là Si, si il y a d'autres développeurs PHP, mais j'ai un tendance compulsive à cliquer sur "Nouveaux messages".
adn Posté 5 Mai 2006 Posté 5 Mai 2006 (modifié) Bonsoir, Sans PHP5, existe-t-il des classes permettant de faire du simpleXML ou quelque chose d'approchant ? Modifié 5 Mai 2006 par adn
Loupilo Posté 5 Mai 2006 Auteur Posté 5 Mai 2006 Bonsoir, Sans PHP5, existe-t-il des classes permettant de faire du simpleXML ou quelque chose d'approchant ? <{POST_SNAPBACK}> Voici la fonction que j'utilisais (à adapter) : // avec $url l'adresse du fichier xml$parseur=xml_parser_create(); xml_set_element_handler($parseur,"fonctionBaliseOuvrante","fonctionBaliseFermante"); xml_set_character_data_handler($parseur,"fonctionTexte"); function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs) { global $derniereBaliseRencontree; $derniereBaliseRencontree = $nomBalise; } function fonctionBaliseFermante($parseur, $nomBalise) { global $derniereBaliseRencontree; $derniereBaliseRencontree = ""; } function fonctionTexte($parseur, $texte) { global $derniereBaliseRencontree; global $resultat; switch ($derniereBaliseRencontree) { case "AUTHOR": $resultat[0] = $texte; break; case "TITLE": $resultat[1] = $texte; break; case "LABEL": $resultat[2] = $texte; break;//etc, pour tous les éléments désirés... mais ça ne gère pas les éléments multiples (pour ça, il faut une petite boucle sur <item>) } return $resultat; } @$fp = @fopen($url,"r"); if ($fp) { while ($data = fread($fp, 4096)) { if ( !@xml_parse($parseur, $data, feof($fp)) ) { $err=1; break; } xml_parse($parseur, $sata, feof($fp)); } }
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant