프로그래밍/PHP

php -xml parser

규리맘♡ 2012. 8. 17. 14:00
반응형

<?php

$p = new XMLParser('test.xml');

print_r($p->data);

 

class XMLParser 

{

   var $filename;

   var $xml;

   var $data;


   function XMLParser($xml_file)

   {

       $this->filename = $xml_file;

       $this->xml = xml_parser_create();

       xml_set_object($this->xml, $this);

       xml_set_element_handler($this->xml, 'startHandler', 'endHandler');

       xml_set_character_data_handler($this->xml, 'dataHandler');

       $this->parse($xml_file);

   }

   

   function parse($xml_file)

   {

       if (!($fp = fopen($xml_file, 'r'))) {

             die('Cannot open XML data file: '.$xml_file);

               return false;

       }

 

       $bytes_to_parse = 512;

 

       while ($data = fread($fp, $bytes_to_parse)) {

           $parse = xml_parse($this->xml, $data, feof($fp));

           

           if (!$parse) {

               die(sprintf("XML error: %s at line %d",

                   xml_error_string(xml_get_error_code($this->xml)),

                       xml_get_current_line_number($this->xml)));

                       xml_parser_free($this->xml

                     );

           }

       }

 

       return true;

   }

   

   function startHandler($parser, $name, $attributes)

   {

       $data['name'] = $name;

       if ($attributes) 

       { $data['attributes'] = $attributes; }

        $this->data[] = $data;

   }

 

   function dataHandler($parser, $data)

   {

       if ($data = trim($data)) {

           $index = count($this->data) - 1;

           $this->data[$index]['data'] .= $data;

       }

   }

 

   function endHandler($parser, $name)

   {

        if (count($this->data) > 1) {

           $data = array_pop($this->data);

           $index = count($this->data) - 1;

           $this->data[$index]['child'][] = $data;

       }

        else if (count($this->data) == 1)

            $this->data = array_pop($this->data);

   }

}

?>

반응형