2009-10-06 5 views

Répondre

2

Compte tenu de la pièce suivante de XML et le code pour le charger avec SimpleXML:

$str = <<<XML 
<root> 
    <a> 
     <b> 
      <c>glop</c> 
      <d>test</d> 
     </b> 
    </a> 
</root> 
XML; 
$xml = simplexml_load_string($str); 

Vous pouvez "cast" $xml->a->b à un tableau, pour pouvoir itérer dessus:

foreach ((array)$xml->a->b as $name => $value) { 
    echo "$name : $value<br />"; 
} 

Et vous obtiendrez ce genre de sortie:

c : glop 
d : test 

(peut-être pas exactement la même chaîne XML que la vôtre, mais j'espère que cela vous aidera à trouver la solution - si c'est le cas, pouvez-vous éditer votre question pour nous montrer des données XML et la sortie que vous voudrez obtenir?)

Citant la page de manuel, au Converting to array section:

Si un objet est converti en un tableau, le résultat est un tableau dont les éléments sont les propriétés de l'objet.
Les clés sont les noms des variables membres, avec quelques exceptions notables: nombre entier propriétés non accessibles; variables variables ont le nom de classe ajouté au nom de la variable; les variables protégées ont un '*' ajouté au nom de la variable.

+0

Cet objet utilise ArrayAccess. Je ne suis pas sûr que votre solution fonctionnerait pour cela. – Citizen

+0

Hu; vous voulez dire que cela n'a rien à voir avec SimpleXML? (il y a "simplexml" dans le titre de votre question, donc j'ai peut-être pris un raccourci ^^) –

+0

Il utilise simpleXML, l'objet est un objet qui implémente l'interface ArrayAccess, et votre réponse était correcte :) Ajout (tableau) à l'avant de ma foreach causé ma clé $ pour obtenir la valeur correcte, au lieu de retourner une valeur NULL. – Citizen

6

XML:

<a> 
    <b> 
    <c /> 
    <d /> 
    <e /> 
    </b> 
</a> 

Code PHP:

$xml = new SimpleXMLElement($file_url, true); 
foreach($xml->b->children() as $node) { 
    echo $node->getName() . "\n"; 
} 

Souhaitez-vous donner:

c 
d 
b 

Voir PHP's manual pour référence ultérieure.

+0

Cela fonctionne également, mais sa réponse a été d'abord :) – Citizen

+0

Il s'agit d'une solution plus élégante et basée sur OO utilisant mieux SimpleXML. –

Questions connexes