PHP – SAX Parser

By | March 18, 2022
PHP - SAX Parser

SAX parser parses the XML file ensuring better memory management than other parsing methods. This parser does not allow to keep in the memory thus you can parse the large file using SAX parser. Below example will allow you to know about how to get data from the XML file using SAX parser.

First, we will create an XML file containing the data to be accessed using PHP code.

Data.xml file

<?xml version = "1.0" encoding = "utf-8"?>
<detail>
   <subject>
      <name>data structure</name>
      <class>XXX</class>
      <teacher>YYY</teacher>
   </subject>

   <subject>
      <name>OS</name>
  <class>XXX</class>
      <teacher>YYY</teacher>
   </subject>
</detail>

Below is the php file through which the data of data.xml file is going to be accessed.

Access.php file

<?php
   $detail   = array();
   $elements   = null;
   // when tags are opened call the function
   function startElements($parser, $name, $attrs) {
      global $detail, $elements;
      if(!empty($name)) {
         if ($name == SUBJECT) {
            // creating array to store data
            $detail []= array();
         }
         $elements = $name;
      }
   }
   // when tags are closed call this function
   function endElements($parser, $name) {
      global $elements;     
      if(!empty($name)) {
         $elements = null;
      }
   }
   // for text between the start and end of the tags
   function characterData($parser, $data) {
      global $detail, $elements;
      if(!empty($data)) {
         if ($elements == 'NAME' ||  $elements == 'EMAIL' ||  $elements == TEACHER) {
            $tutors[count($detail)-1][$elements] = trim($data);
         }
      }
   }
   $parser = xml_parser_create(); 
   xml_set_element_handler($parser, "startElements", "endElements");
   xml_set_character_data_handler($parser, "characterData");
   if (!($handle = fopen(Data.xml', "r"))) {
      die("could not open XML input");
   }
   while($data = fread($handle, 4096)) {
      xml_parse($parser, $data);  // start parsing 
   }
   xml_parser_free($parser); // deleting parser
   $i = 1;
   foreach($detail as $subject) {
      echo "subject No - ".$i.'<br/>';
      echo "subject Name - ".$subject['NAME'].'<br/>';
      echo "Email - ".$subject['EMAIL'].'<br/>';
      echo "Teacher - ".$subject[TEACHER].'<hr/>'; 
      $i++; 
   }
?>

Output-

subject no - 1
subject Name - data structure
Email - XXX
Teacher - YYY


subject no - 2
subject Name - OS
Email - XXX
Teacher - YYY

People are also reading:

Author: Aashiya Mittal

A computer science engineer with great ability and understanding about programming languages. have been in the writing world since the last three years and creating valuable content for all in all possible fields.

Leave a Reply

Your email address will not be published.