SimpleXML

Résolu
Signaler
-
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
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

Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
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à ;)
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
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à ;)
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
Oki j'ai trouvé

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


Merci beaucoup pour ton aide !

Bonne soirée,

A++
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
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à ;)