note 75311 modified in function.simplexml-element-children by danbrown

From: Date: Wed, 16 Sep 2009 15:34:26 +0000
Subject: note 75311 modified in function.simplexml-element-children by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-160637@lists.php.net to get a copy of this message
Here's a simple, recursive, function to transform XML data into pseudo E4X syntax ie. root.child.value = foobar <?php error_reporting(E_ALL); $xml = new SimpleXMLElement( '<Patriarch> <name>Bill</name> <wife> <name>Vi</name> </wife> <son> <name>Bill</name> </son> <daughter> <name>Jeri</name> <husband> <name>Mark</name> </husband> <son> <name>Greg</name> </son> <son> <name>Tim</name> </son> <son> <name>Mark</name> </son> <son> <name>Josh</name> <wife> <name>Kristine</name> </wife> <son> <name>Blake</name> </son> <daughter> <name>Liah</name> </daughter> </son> </daughter> </Patriarch>'); RecurseXML($xml); function RecurseXML($xml,$parent="") { $child_count = 0; foreach($xml as $key=>$value) { $child_count++; if(RecurseXML($value,$parent.".".$key) == 0) // no childern, aka "leaf node" { print($parent . "." . (string)$key . " = " . (string)$value . "<BR>\n"); } } return $child_count; } ?> The output.... .name = Bill .wife.name = Vi .son.name = Bill .daughter.name = Jeri .daughter.husband.name = Mark .daughter.son.name = Greg .daughter.son.name = Tim .daughter.son.name = Mark .daughter.son.name = Josh .daughter.son.wife.name = Kristine .daughter.son.son.name = Blake .daughter.son.daughter.name = Liah --was-- Here's a simple, recursive, function to transform XML data into pseudo E4X syntax ie. root.child.value = foobar <?php error_reporting(E_ALL); $xml = new SimpleXMLElement( '<Patriarch> <name>Bill</name> <wife> <name>Vi</name> </wife> <son> <name>Bill</name> </son> <daughter> <name>Jeri</name> <husband> <name>Mark</name> </husband> <son> <name>Greg</name> </son> <son> <name>Tim</name> </son> <son> <name>Mark</name> </son> <son> <name>Josh</name> <wife> <name>Kristine</name> </wife> <son> <name>Blake</name> </son> <daughter> <name>Liah</name> </daughter> </son> </daughter> </Patriarch>'); RecurseXML($xml); function RecurseXML($xml,$parent="") { $child_count = 0; foreach($xml as $key=>$value) { $child_count++; if(RecurseXML($value,$parent.".".$key) == 0) // no childern, aka "leaf node" { print($parent . "." . (string)$key . " = " . (string)$value . "<BR>\n"); } } return $child_count; } ?> The output.... .name = Bill .wife.name = Vi .son.name = Bill .daughter.name = Jeri .daughter.husband.name = Mark .daughter.son.name = Greg .daughter.son.name = Tim .daughter.son.name = Mark .daughter.son.name = Josh .daughter.son.wife.name = Kristine .daughter.son.son.name = Blake .daughter.son.daughter.name = Liah http://php.net/manual/en/function.simplexml-element-children.php

« previous php.notes (#160637) next »