note 90732 deleted from function.xml-parse by thiago

From: Date: Thu, 07 May 2009 12:34:39 +0000
Subject: note 90732 deleted from function.xml-parse by thiago
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-154309@lists.php.net to get a copy of this message
Note Submitter: vladimir_wof_nikolaich_dot_ru ---- Function that posted by "lz_speedy at web dot de" is nice, but have some problems with attributes in open tags, so I hope this function will be helpful for others: function my_xml2array($__url) { $xml_values = array(); $contents = file_get_contents($__url); $parser = xml_parser_create(''); if(!$parser) return false; xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, trim($contents), $xml_values); xml_parser_free($parser); if (!$xml_values) return array(); $xml_array = array(); $last_tag_ar =& $xml_array; $parents = array(); foreach ($xml_values as $data) { switch($data['type']) { case 'open': $new_tag = array('name' => $data['tag']); if(isset($data['attributes'])) $new_tag['attributes'] = $data['attributes']; if(isset($data['value']) && trim($data['value'])) $new_tag['value'] = trim($data['value']); $last_tag_ar[] = $new_tag; $parents[$data['level']] =& $last_tag_ar; $last_tag_ar =& $last_tag_ar[count($last_tag_ar)-1]; break; case 'complete': $new_tag = array('name' => $data['tag']); if(isset($data['attributes'])) $new_tag['attributes'] = $data['attributes']; if(isset($data['value']) && trim($data['value'])) $new_tag['value'] = trim($data['value']); $last_count = count($last_tag_ar)-1; // there can be a situation, where $last_count == -1, so we just check it // (in the case of open tag we always add a value by ourself before so we can't get such a value) $last_tag_ar[$last_count>=0 ? $last_count : 0][] = $new_tag; break; case 'close': $last_tag_ar =& $parents[$data['level']]; break; default: break; }; } return $xml_array; }

« previous php.notes (#154309) next »