PHP Classes

File: XmlParser.class.php

Recommend this page to a friend!
  Classes of Eren Ezgü   XML Parser (XML to array)   XmlParser.class.php   Download  
File: XmlParser.class.php
Role: Class source
Content type: text/plain
Description: XmlParser Class file
Class: XML Parser (XML to array)
Build an array with a XML document structure
Author: By
Last change: now Accessible without user login
Date: 14 years ago
Size: 2,081 bytes
 

Contents

Class file image Download
<?
/**
* @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);
    }
}
?>