Location: PHPKode > scripts > XML Parser > xml-parser-2199/XmlParser.class.php
<?
/**
* @desc XML Parser Class (returns xml data as array)
* @author Eren Ezgü [eezgu at eezgu.com]
*
* @example
*       $parser = new XmlParser($xml_input);
*       $result = $parser->parse();
* @example
*       $parser = new XmlParser();
*       $result = $parser->parse($xml_input);
*/
class XmlParser{
    var $xml_parser;
    var $xml_input=null;

    var $elements = array();
    var $index_arr = array();
    var $ref;

    /**
    * @desc Constructor
    * @param string
    */
    function XmlParser($xml=null){
        $this->xml_input = $xml;
    }
    /**
    * @desc Parsing function
    * @param string
    */
    function parse($xml=null){
        $this->xml_input = $xml;
        if($this->xml_input==null){
            return false;
        }
        $this->xml_parser = xml_parser_create();
        xml_set_object($this->xml_parser, $this);
        xml_set_element_handler($this->xml_parser,"startElement","endElement");
        xml_set_character_data_handler($this->xml_parser,"characterData");
        if(!xml_parse($this->xml_parser, $this->xml_input)){
            return false;
        }
        xml_parser_free($this->xml_parser);
        return $this->elements;
    }

    function startElement($parser,$tagName,$attrs){
        $this->ref=&$this->elements;
        foreach($this->index_arr as $index){
            $this->ref = &$this->ref[$index];
        }
        $this->ref[] = array('tag'=>$tagName,'attr'=>$attrs,'data'=>'','children'=>array());
        $i = end(array_keys($this->ref));
        array_push($this->index_arr,$i);
        array_push($this->index_arr,'children');
    }

    function characterData($parser, $data){
        $index_arr = $this->index_arr;
        array_pop($index_arr);
        $ref=&$this->elements;
        foreach($index_arr as $index){
            $ref = &$ref[$index];
        }
        $ref['data']=$data;
    }

    function endElement($parser,$tagName){
        array_pop($this->index_arr);
        array_pop($this->index_arr);
    }
}
?>
Return current item: XML Parser