Aller au contenu

simpleXML refuse d'extraire mes données


Sujets conseillés

Posté

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 :huh:

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.

Posté

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 ;)

Posté

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.

Posté

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.

Posté

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.

Posté

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".

Posté (modifié)

Bonsoir,

Sans PHP5, existe-t-il des classes permettant de faire du simpleXML ou quelque chose d'approchant ?

Modifié par adn
Posté
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));
}
}

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...