SAX解析器用于解析xml文件,更好地用于内存管理,而不是xml解析器和DOM。它不会在内存中保留任何数据,因此可用于非常大的文件。以下示例将显示如何使用SAX API从xml获取数据。
XML应如下 -
<?xml version = "1.0" encoding = "utf-8"?> <tutors> <course> <name>Android</name> <country>India</country> <email>contact@vue5.com</email> <phone>123456789</phone> </course> <course> <name>Java</name> <country>India</country> <email>contact@tutorialspoint.com</email> <phone>123456789</phone> </course> <course> <name>HTML</name> <country>India</country> <email>contact@tutorialspoint.com</email> <phone>123456789</phone> </course> </tutors>
Php文件应如下 -
<?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++; } ?>
输出结果如下 -