Blame | Last modification | View Log | RSS feed
<?php/*** Project: XMLParser: A library for parsing XML feeds* File: XMLParser.class.php** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA** @link http://www.phpinsider.com/php/code/XMLParser/* @copyright 2004-2005 New Digital Group, Inc.* @author Monte Ohrt <monte at newdigitalgroup dot com>* @package XMLParser* @version 1.0-dev*/class XMLParser{/*** holds the expat object** @var obj*/var $xml_obj = null;/*** holds the output array** @var array*/var $output = array();/*** the XML file character set** @var array*/var $char_set = 'UTF-8';/**#@-*//*** The class constructor.*/function __construct(){ }/*** parse the XML file (or URL)** @param string $path the XML file path, or URL*/function parse($path){$this->output = array();$this->xml_obj = xml_parser_create($this->char_set);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");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 $this->output;}/*** define the start tag handler** @param obj $parser the expat parser object* @param string $name the XML tag name* @param array $attribs the XML tag attributes*/function startHandler($parser, $name, $attribs){$_content = array('name' => $name);if(!empty($attribs))$_content['attrs'] = $attribs;array_push($this->output, $_content);}/*** define the tag data handler** @param obj $parser the expat parser object* @param string $data the XML data*/function dataHandler($parser, $data){if(!empty($data)) {$_output_idx = count($this->output) - 1;if(!isset($this->output[$_output_idx]['content']))$this->output[$_output_idx]['content'] = $data;else$this->output[$_output_idx]['content'] .= $data;}}/*** define the end tag handler** @param obj $parser the expat parser object* @param string $name the XML tag name*/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;}}}?>