2009-11-07 4 views
0

Im essayant de faire une boucle et afficher des informations de la structure xml suivante.naviguer à travers cette structure xml avec php

<users_list> 
    −<users type="array"> 
    +<user> 
     <id>Blah</id> 
    </user> 
    +<user></user> 
    +<user></user> 
    </users> 
    <next_link>6</next_link> 
    <prev_link>4</prev_link> 
</users_list> 

Im en utilisant le PHP suivant pour récupérer les nœuds. J'ai essayé quelques variations, mais je ne vois aucun effet.

 $xml = simplexml_load_string($rawxml); 
     foreach($xml->users_list AS $key){ 
      $name = $key->users->user->{"id"}; 
     } 
      $next = $key->{"next_link"}; 
      $prev = $key->{"prev_link"}; 

Je ne reçois rien lorsque je fais écho à mes variables, ou des arguments non valides quand sur foreach la fonction

Répondre

2

Lorsque vous utilisez SimpleXML, vous devez toujours nommer vos variables après le nœud racine qu'ils contiennent, cela rend les choses plus simples et évidentes:

$users_list = simplexml_load_string(
    '<users_list> 
     <users type="array"> 
     <user> 
      <id>Blah</id> 
     </user> 
     <user></user> 
     <user></user> 
     </users> 
     <next_link>6</next_link> 
     <prev_link>4</prev_link> 
    </users_list>' 
); 

foreach ($users_list->users->user as $user) 
{ 
    echo "User ", $user->id, "\n"; 
} 

echo "next: ", $users_list->next_link, "\n"; 
echo "prev: ", $users_list->prev_link, "\n"; 
+0

Attention: Argument invalide fourni pour foreach() dans functions.php sur la ligne 55 Array - C'est ce que je reçois quand j'utilise cette méthode. – mrpatg

+0

Le code que j'ai publié fonctionne tel quel. Ma conjecture est que votre variable n'est pas nommée $ users_list. Essayez 'error_reporting (E_ALL);' –

0

print_r($xml) devrait vous donner toutes les informations dont vous avez besoin. Vous constaterez probablement que le tableau réel est $ xml-> user_list-> utilisateurs-> utilisateur, casting aussi permet d'économiser un peu de temps

foreach($xml->user_list->users->user as $value) { 
    $name = (string) $value->id; 
} 
2

Lors du dépannage en PHP, var_dump et print_r sont vos amis!

Si vous souhaitez parcourir votre résultat comme un tableau, placez-le dans un tableau.

$value = (array) $value;

j'ai fait ce qui suit:

$xmlStr = '<users_list> 
<users type="array"> 
<user> 
<id>Blah</id> 
</user> 
<user></user> 
<user></user> 
</users> 
<next_link>6</next_link> 
<prev_link>4</prev_link> 
</users_list>'; 

$xml = simplexml_load_string($xmlStr); 

foreach($xml->users->user AS $key=>$value){ 
    $value = (array) $value; 
    $name = $value["id"]; 
    var_dump($name); 
} 

qui donne la sortie:

string(4) "Blah" 
NULL 
NULL 

Consulter les documents d'aide PHP pour plus d'infos sur SimpleXML

+0

Notez que print_r() et var_dump() ne fonctionnent pas si bien avec SimpleXMLElement, les enfants n'apparaîtront pas et certains attributs non plus. –

Questions connexes