SimpleXML

Résolu
Utilisateur anonyme - Modifié le 31 janv. 2010 à 02:37
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 31 janv. 2010 à 02:37
Bonsoir,

Je débute avec SimpleXML et j'ai du mal à lire la syntaxe de mon XML.

Voici mon XML :
 
<content>PLAYLIST</content> 
<datas> 
 
 
<hour>01:05:01</hour> 
 
<cover objectid="115040" mediaid="207579" url=""/> 
<title>Mon titre</title> 
Artiste 
Album 

 
 
<hour>01:05:09</hour> 
 
<cover objectid="118324" mediaid="210682" url=""/> 
<title>Titre</title> 
Artiste 
Album


</datas>


J'essaye donc en PHP de sortir l'artist de ce XML en faisant :

$classe = simplexml_load_file("playlist.xml");
foreach ($classe->pressplay->datas->items->item as $style) { 
 
    print "Titre : {$style->title} 
\n"; 
    print "Artiste : {$style->artist} 
\n"; 

  } 


Mais sans succès... J'ai une page vide. Avez-vous une idée d'ou ca coince ?

Merci pour vos pistes :)

A++

5 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
31 janv. 2010 à 02:11
Salut,

Essaie sans pressplay :

foreach ($classe->datas->items->item as $style) {


Il me semble bien que SXE itère directement dans l'élément racine, sans qu'il soit nécessaire de le spécifier.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
31 janv. 2010 à 02:14
Ah... Autre chose... Si items contient plusieurs items, il faut accéder à chaque en itérant dessus... Ou alors, spécifier clairement auquel tu veux accéder.

Autrement dit, d'abord tu itères sur les items, ensuite sur les éléments de chaque item.
foreach ($classe->pressplay->datas->items as $item) {


Bref, y'a les deux trucs : ne pas spécifier l'élément racine parce que SXE itère dedans implicitement, et ne pas spécifier les éléments que tu souhaites avoir dans ton itération, puisque ce sont les éléments récupérés. J'espère que je suis clair, c'est pas gagné...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
Hello,

Ah bah oui en effet ca fonctionne !

Voici mon code actuel :

foreach ($classe->datas->items->item as $style) { 
 
    print "Titre : {$style->title} 
\n"; 
    print "Auteur : {$style->artist} 
\n";
    print "Type : {$style->object->type} <hr />\n"; 

  } 


Et comment faire si je veux récupérer la valeur SONG dans <object type=""> ?

Encore merci
0
Oki j'ai trouvé

print "Type : {$item->id['type']} <hr />\n"; 


Merci beaucoup pour ton aide !

Bonne soirée,

A++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
31 janv. 2010 à 02:37
Oui, en réalité, $item->id['type'] est un objet SimpleXMLElement. Il faut le convertir en chaîne de caractère pour pouvoir le manipuler en tant que tel (ce qui est fait implicitement lors d'un echo ou print).

AU fait, me suis gourré, il faut bien préciser le nom des éléments qu'on veut dans l'itération :
foreach ($classe->pressplay->datas->items->item as $item) {


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0