note 55904 added to function.xml-parse-into-struct

From: Date: Wed, 17 Aug 2005 05:40:44 +0000
Subject: note 55904 added to function.xml-parse-into-struct
Groups: php.notes 
Request: Send a blank email to php-notes+get-93773@lists.php.net to get a copy of this message
/* * _xml2array - an abstraction layer on xml_parse_into_struct that returns a * nice nested array. based on dudus at onet dot pl's: * http://www.php.net/manual/en/function.xml-parse-into-struct.php#49154 * changes made are: * - nicer formatting of code * - set xml parser options to make array keys lowercase / ignore whitespace * - stuffed attributes into a child array of the same name **/ /* * @param: $raw_xml - string containing xml to feed into xml_parse_into_struct() * returns nice nested php array containing xml data. **/ function _xml2array($raw_xml) { $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($xml_parser, $raw_xml, $vals); xml_parser_free($xml_parser); $_tmp=''; foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_level!=1 && $x_type == 'close') { if (isset($multi_key[$x_tag][$x_level])) { $multi_key[$x_tag][$x_level]=1; } else { $multi_key[$x_tag][$x_level]=0; } } if ($x_level!=1 && $x_type == 'complete') { if ($_tmp==$x_tag) { $multi_key[$x_tag][$x_level]=1; } $_tmp=$x_tag; } } foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_type == 'open') { $level[$x_level] = $x_tag; } $start_level = 1; $php_stmt = '$xml_array'; if ($x_type=='close' && $x_level!=1) { $multi_key[$x_tag][$x_level]++; } while($start_level < $x_level) { $php_stmt .= '[$level['.$start_level.']]'; if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level]) { $php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']'; } $start_level++; } $add=''; if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) { if (!isset($multi_key2[$x_tag][$x_level])) { $multi_key2[$x_tag][$x_level]=0; } else { $multi_key2[$x_tag][$x_level]++; } $add='['.$multi_key2[$x_tag][$x_level].']'; } if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes',$xml_elem)) { if ($x_type == 'open') { $php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; } else { $php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];'; } eval($php_stmt_main); } if (array_key_exists('attributes',$xml_elem)) { if (isset($xml_elem['value'])) { $php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; eval($php_stmt_main); } foreach ($xml_elem['attributes'] as $key=>$value) { $php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[\'attributes\'][$key] = $value;'; eval($php_stmt_att); } } } return $xml_array; } ---- Manual Page -- http://www.php.net/manual/en/function.xml-parse-into-struct.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+55904 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+55904&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+55904&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#93773) next »