note 56762 added to ref.xml

From: Date: Wed, 14 Sep 2005 16:48:30 +0000
Subject: note 56762 added to ref.xml
Groups: php.notes 
Request: Send a blank email to php-notes+get-95173@lists.php.net to get a copy of this message
Here is another simple XML-to-array parser using the expat library. My goal was something that parsed everything (attributes, data, etc.) cleanly and also encapsulated all of its functionality inside a PHP class. You can supply anything fopen() accepts (file, url, etc.) usage: <?php $p =& new xmlParser(); $p->parse('http://domain.com/rss.xml'); print_r($p->output); ?> Here is the source: <?php class xmlParser{ var $xml_obj = null; var $output = array(); function xmlParser(){ $this->xml_obj = xml_parser_create(); xml_set_object($this->xml_obj,$this); xml_set_character_data_handler($this->xml_obj, 'dataHandler'); xml_set_element_handler($this->xml_obj, "startHandler", "endHandler"); } function parse($path){ if (!($fp = fopen($path, "r"))) { die("Cannot open XML data file: $path"); return false; } while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml_obj, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_obj)), xml_get_current_line_number($this->xml_obj))); xml_parser_free($this->xml_obj); } } return true; } function startHandler($parser, $name, $attribs){ $_content = array('name' => $name); if(!empty($attribs)) $_content['attrs'] = $attribs; array_push($this->output, $_content); } function dataHandler($parser, $data){ if(!empty($data)) { $_output_idx = count($this->output) - 1; $this->output[$_output_idx]['content'] = $data; } } function endHandler($parser, $name){ if(count($this->output) > 1) { $_data = array_pop($this->output); $_output_idx = count($this->output) - 1; $this->output[$_output_idx]['child'][] = $_data; } } } ?> ---- Manual Page -- http://www.php.net/manual/en/ref.xml.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+56762 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+56762&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+56762&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#95173) next »