Example #1
0
 public static function simpleXmlToArray($xml, &$recursion_depth = 0)
 {
     if ($recursion_depth > 25) {
         // Fatal error. Exit now.
         return null;
     }
     if ($recursion_depth == 0) {
         if (get_class($xml) != 'SimpleXMLElement') {
             // If the external caller doesn't call this function initially
             // with a SimpleXMLElement object, return now.
             return null;
         } else {
             // Store the original SimpleXmlElementObject sent by the caller.
             // We will need it at the very end when we return from here for good.
             $provided_xml = $xml;
         }
     }
     if (get_class($xml) == 'SimpleXMLElement') {
         // Get a copy of the simpleXmlElementObject
         $copy_xml = $xml;
         // Get the object variables in the SimpleXmlElement object for us to iterate.
         $xml = get_object_vars($xml);
     }
     // It needs to be an array of object variables.
     if (is_array($xml)) {
         // Initialize the result array.
         $result_array = array();
         // Is the input array size 0? Then, we reached the rare CDATA text if any.
         if (count($xml) <= 0) {
             // Let us return the lonely CDATA. It could even be
             // an empty element or just filled with whitespaces.
             return trim(strval($copy_xml));
         }
         // Let us walk through the child elements now.
         foreach ($xml as $key => $value) {
             // When this block of code is commented, XML attributes will be
             // added to the result array.
             // Uncomment the following block of code if XML attributes are
             // NOT required to be returned as part of the result array.
             /*
             if((is_string($key)) && ($key == SIMPLE_XML_ELEMENT_OBJECT_PROPERTY_FOR_ATTRIBUTES)) {
               continue;
             }
             */
             // Let us recursively process the current element we just visited.
             // Increase the recursion depth by one.
             $recursion_depth++;
             $result_array[$key] = convert::simpleXmlToArray($value, $recursion_depth);
             // Decrease the recursion depth by one.
             $recursion_depth--;
         }
         if ($recursion_depth == 0) {
             // That is it. We are heading to the exit now.
             // Set the XML root element name as the root [top-level] key of
             // the associative array that we are going to return to the caller of this
             // recursive function.
             $temp_array = $result_array;
             $result_array = array();
             $result_array[$provided_xml->getName()] = $temp_array;
         }
         return $result_array;
     } else {
         // We are now looking at either the XML attribute text or
         // the text between the XML tags.
         return trim(strval($xml));
     }
     // End of else
 }