note 98748 deleted from book.simplexml by danbrown

From: Date: Mon, 05 Jul 2010 13:31:42 +0000
Subject: note 98748 deleted from book.simplexml by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-170707@lists.php.net to get a copy of this message
Note Submitter: AthenaLightenedMyPath at gmail dot com ---- I have changed the simpleXMLToArray function from xananax at yelostudio dot com a little bit. Because the old function can not handle the xml file like this: test.xml <?xml version="1.0" encoding="UTF-8"?> <root> <fieldA /> <fieldA /> <fieldB /> <fieldB /> </root> Code i have changed: <?php /** * Converts a simpleXML element into an array. Preserves attributes and everything. * You can choose to get your elements either flattened, or stored in a custom index that * you define. * @param simpleXMLElement $xml the XML to convert * @param boolean $flattenValues Choose wether to flatten values * or to set them under a particular index. * defaults to true; * @param boolean $flattenAttributes Choose wether to flatten attributes * or to set them under a particular index. * Defaults to true; * @param boolean $flattenChildren Choose wether to flatten children * or to set them under a particular index. * Defaults to true; * @param string $valueKey index for values, in case $flattenValues was set to * false. Defaults to "@value" * @param string $attributesKey index for attributes, in case $flattenAttributes was set to * false. Defaults to "@attributes" * @param string $childrenKey index for children, in case $flattenChildren was set to * false. Defaults to "@children" * @return array the resulting array. */ function simpleXMLToArray($xml, $flattenValues=true, $flattenAttributes = true, $flattenChildren=true, $valueKey='@value', $attributesKey='@attributes', $childrenKey='@children'){ $return = array(); if(!($xml instanceof SimpleXMLElement)){return $return;} $name = $xml->getName(); $_value = trim((string)$xml); if(strlen($_value)==0){$_value = null;}; if($_value!==null){ if(!$flattenValues){$return[$valueKey] = $_value;} else{$return = $_value;} } $children = array(); $first = ""; foreach($xml->children() as $elementName => $child){ $value = simpleXMLToArray($child, $flattenValues, $flattenAttributes, $flattenChildren, $valueKey, $attributesKey, $childrenKey); if(isset($children[$elementName])){ if($first === "" || $first != $elementName){ $temp = $children[$elementName]; unset($children[$elementName]); $children[$elementName][] = $temp; $first=$elementName; } $children[$elementName][] = $value; } else{ $children[$elementName] = $value; } } if(count($children)>0){ if(!$flattenChildren){$return[$childrenKey] = $children;} else{$return = array_merge($return,$children);} } $attributes = array(); foreach($xml->attributes() as $name=>$value){ $attributes[$name] = trim($value); } if(count($attributes)>0){ if(!$flattenAttributes){$return[$attributesKey] = $attributes;} else{$return = array_merge($return, $attributes);} } return $return; } ?>

« previous php.notes (#170707) next »