Ví dụ về trình phân tích cú pháp PHP - SAX

Trình phân tích cú pháp SAX đã được sử dụng để phân tích cú pháp tệp xml và quản lý bộ nhớ tốt hơn trình phân tích cú pháp xml mẫu và DOM. Nó không giữ bất kỳ dữ liệu nào trong bộ nhớ nên có thể được sử dụng cho các tệp rất lớn. Ví dụ sau sẽ cho thấy cách lấy dữ liệu từ xml bằng cách sử dụng SAX API.

SAX.xml

XML phải như sau:

<?xml version = "1.0" encoding = "utf-8"?>
<tutors>
   <course>
      <name>Android</name>
      <country>India</country>
      <email>[email protected]</email>
      <phone>123456789</phone>
   </course>
   
   <course>
      <name>Java</name>
      <country>India</country>
      <email>[email protected]</email>
      <phone>123456789</phone>
   </course>
   
   <course>
      <name>HTML</name>
      <country>India</country>
      <email>[email protected]</email>
      <phone>123456789</phone>
   </course>
</tutors>

SAX.php

Tệp Php sẽ như sau:

<?php
   //Reading XML using the SAX(Simple API for XML) parser 
   
   $tutors   = array();
   $elements   = null;
   
   // Called to this function when tags are opened 
   function startElements($parser, $name, $attrs) {
      global $tutors, $elements;
      
      if(!empty($name)) {
         if ($name == 'COURSE') {
            // creating an array to store information
            $tutors []= array();
         }
         $elements = $name;
      }
   }
   
   // Called to this function when tags are closed 
   function endElements($parser, $name) {
      global $elements;
      
      if(!empty($name)) {
         $elements = null;
      }
   }
   
   // Called on the text between the start and end of the tags
   function characterData($parser, $data) {
      global $tutors, $elements;
      
      if(!empty($data)) {
         if ($elements == 'NAME' || $elements == 'COUNTRY' ||  $elements == 'EMAIL' ||  $elements == 'PHONE') {
            $tutors[count($tutors)-1][$elements] = trim($data);
         }
      }
   }
   
   // Creates a new XML parser and returns a resource handle referencing it to be used by the other XML functions. 
   $parser = xml_parser_create(); 
   
   xml_set_element_handler($parser, "startElements", "endElements");
   xml_set_character_data_handler($parser, "characterData");
   
   // open xml file
   if (!($handle = fopen('sax.xml', "r"))) {
      die("could not open XML input");
   }
   
   while($data = fread($handle, 4096)) // read xml file {
      xml_parse($parser, $data);  // start parsing an xml document 
   }
   
   xml_parser_free($parser); // deletes the parser
   $i = 1;
   
   foreach($tutors as $course) {
      echo "course No - ".$i.'<br/>';
      echo "course Name - ".$course['NAME'].'<br/>';
      echo "Country - ".$course['COUNTRY'].'<br/>';
      echo "Email - ".$course['EMAIL'].'<br/>';
      echo "Phone - ".$course['PHONE'].'<hr/>'; 
      $i++; 
   }
?>

Nó sẽ tạo ra kết quả sau: