Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2011, 17h15   #1
Invité de passage
 
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 0
Points : 0
Par défaut soucis accès aux données enfants d'enfants dynamique

Bonjour,

J'ai un soucis avec simpleXML.

Je récupère un XML et j'essaye d’accéder aux données. J'arrive accéder aux enfants, aux enfants des enfants mais pas aux enfants des enfants dynamiques.

Voici un exemple :

Code xml :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Game>
  <Members>
      <Member id="1">
         <Aspect type="1" level="2">
         <Aspect type="2" level="7">
         <Aspect type="3" level="1">
      </Member>
      <Member id="2">
         <Effect type="8" value="15"> 
         <Effect type="2" value="10">     
         <Aspect type="1" level="8">
         <Aspect type="2" level="22">
         <Aspect type="3" level="11">
      </Member>
  </Members>
</Game>
Comme on peut le voir le Membre 2 à 2 effects. Je voudrais récupérer tous les effects et les associer à l'id du membre

J'ai fait :

Code php :
1
2
3
4
5
6
7
8
9
10
11
$xml = simplexml_load_string($string);
 
$members= $xml->xpath('/Game/Members/Member');
 
for ($i=0; $i<sizeof($members); $i++)
{
   foreach ($members[$i]->Effect->attributes() as $key => $val)
   {
      echo $key." - ".$val."<br>";
   }
}

mais ça m'affiche des erreurs de type :
Citation:
Warning: main() [function.main]: Node no longer exists
et ça m'affiche que le 1er effet

D'où vient l'erreur et comment avoir tous les effects ?

Merci
jerome572 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 17h24   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
si tu veux les effets c'est
Code :
1
2
3
4
5
6
7
8
9
10
 
$effects = $xml->xpath('//Effect');
 
foreach($effects as $effect)
{
    foreach ($effect->attributes() as $key => $val)
    {
        echo $key, ' - ', $val, '<br/>';
    }
}
et pas besion de for pour parcourir ton premier tableau, foreach est la (en plus sizeof c'est un alias)


sinon que veux tu dire ?
Citation:
et les associer à l'id du membre
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 10h38   #3
Invité de passage
 
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 0
Points : 0
Merci pour ta réponse mais cela ne convient pas.

Si je fais une boucle for, c'est pour récupérer le $i qui est le compteur de la boucle et donc associé l'id du member.

En effet, je veux récupérer les effects mais pour chaque effet, je dois savoir de quel parent il est et ce par l'id.
jerome572 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h07   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par jerome572 Voir le message
Merci pour ta réponse mais cela ne convient pas.

Si je fais une boucle for, c'est pour récupérer le $i qui est le compteur de la boucle et donc associé l'id du member.

En effet, je veux récupérer les effects mais pour chaque effet, je dois savoir de quel parent il est et ce par l'id.
oui tu veux que $key soit l'id ?
qu'est ce que tu voudrais vraiment a la fin ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h21   #5
Invité de passage
 
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 0
Points : 0
En fait, je souhaiterais pour chaque effect que je récupère avec l'id du member parent (Member id="1")

En gros j'aimerais afficher :
idMember - typeEffect - levelEffect

Ce qui donnerai le cas là :
2 - 8 - 15
2 - 2 -10

Ensuite je ferais pareil pour les Aspects

Voila
jerome572 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h42   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
comme ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$members = $xml->xpath('/Game/Members/Member');
 
foreach($members as $member)
{	
    foreach($member->Effect as $effect)
    {
    	echo $member->attributes()->id;
 
        foreach($effect->attributes() as $attr)
        {
        	echo ' - ', $attr;
        }
 
        echo '<br />';
    }
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h44   #7
Invité de passage
 
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 0
Points : 0
Ca marche nickel

Merci
jerome572 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h52.


 
 
 
 
Partenaires

Hébergement Web