2009-08-09 5 views
1

Tous,PHP5: Itérer à travers une liste de nœuds enfants (équivalent de child_nodes())?

J'ai un document XML qui ressemble à ceci:

<root> 
    <profile> 
     <childA> 
     <childB> 
     <childC> 
    <profile> 
    <blah> 
    <blah> 
    <foo> 
    <bar> 
<root> 

Je voudrais être en mesure de saisir le nœud « profil », itérer puis à travers ses enfants (« Childa » , 'childB', etc)

jusqu'à présent, mon code ressemble à ceci:

$doc = new DomDocument(); 
$doc->loadXML(file_get_contents("php://input")); 
$profile_node = $doc->getElementsByTagName("profile")->item(0); 

jusqu'à présent, si bon. $ profile_node a ce que je veux.

En PHP4, je suppose que vous feriez quelque chose comme ceci:

$childnodes = $profile_node->child_nodes(); 
foreach ($childnodes as $node) { 
    // do something with this node 
} 

Mais, je ne peux pas trouver l'équivalent de child_nodes() en PHP5.

Depuis que je suis à peu près un noob concernant PHP, j'apprécierais vraiment un exemple de code, donc je peux voir la syntaxe exacte.

Répondre

3

Selon le php manual, la classe DomNode a une variable publique $ childNodes. Vous pouvez y accéder directement:

foreach ($profile_node->childNodes as $node) { 
    // do something with this node 
} 
+0

Zed - Merci pour votre réponse! Mes excuses - j'aurais dû mentionner que je ne connais pas bien PHP du tout. Donc, je ne connais pas la syntaxe pour créer une boucle qui parcourra les nœuds enfants. Pouvez-vous fournir un exemple de code (par exemple, en utilisant une boucle foreach)? Pas de soucis sinon. – mattstuehler

+0

Vous pouvez simplement remplacer votre boucle foreach avec la boucle foreach donnée et supprimer la ligne directement au-dessus. – Scharrels

+0

Correct. Cela remplace complètement votre code ci-dessous "En PHP4, je suppose que vous feriez quelque chose comme ça" – Zed

1

Si vous ne devez lire, je suggère d'utiliser le paquet simplexml:

$xml = simplexml_load_file('php://input'); 
$childnodes = $xml->xpath("//profile/child::*"); 
foreach($childnodes as $node){ 
    // do something 
} 

Le paquet SimpleXML et le paquet DOM sont interchangeables: vous pouvez importer le SimpleXML dans les objets DOM en utilisant dom_import_simplexml().

Questions connexes