note 24378 added to ref.xml

From: Date: Wed, 14 Aug 2002 17:59:13 +0000
Subject: note 24378 added to ref.xml
Groups: php.notes 
Request: Send a blank email to php-notes+get-35016@lists.php.net to get a copy of this message
Very simple routine to convert an XML file into a PHP structure. $obj->xml contains the resulting PHP structure. I would be interested if someone could suggest a cleaner method than the evals I am using. <? $filename = 'sample.xml'; $obj->tree = '$obj->xml'; $obj->xml = ''; function startElement($parser, $name, $attrs) { global $obj; // If var already defined, make array eval('$test=isset('.$obj->tree.'->'.$name.');'); if ($test) { eval('$tmp='.$obj->tree.'->'.$name.';'); eval('$arr=is_array('.$obj->tree.'->'.$name.');'); if (!$arr) { eval('unset('.$obj->tree.'->'.$name.');'); eval($obj->tree.'->'.$name.'[0]=$tmp;'); $cnt = 1; } else { eval('$cnt=count('.$obj->tree.'->'.$name.');'); } $obj->tree .= '->'.$name."[$cnt]"; } else { $obj->tree .= '->'.$name; } if (count($attrs)) { eval($obj->tree.'->attr=$attrs;'); } } function endElement($parser, $name) { global $obj; // Strip off last -> for($a=strlen($obj->tree);$a>0;$a--) { if (substr($obj->tree, $a, 2) == '->') { $obj->tree = substr($obj->tree, 0, $a); break; } } } function characterData($parser, $data) { global $obj; eval($obj->tree.'->data=\''.$data.'\';'); } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($filename, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); print_r($obj->xml); return 0; ?> -- http://www.php.net/manual/en/ref.xml.php http://master.php.net/manage/user-notes.php?action=edit+24378 http://master.php.net/manage/user-notes.php?action=delete+24378 http://master.php.net/manage/user-notes.php?action=reject+24378

« previous php.notes (#35016) next »