PHP SAX解析器示例
SAX解析器用于解析XML文件,对于内存管理比示例XML解析器和DOM更好。它不在内存中保留任何数据,因此可用于非常大的文件。以下示例将展示如何使用SAX API从XML中获取数据。
SAX.xml
XML应如下所示−
<?xml version = "1.0" encoding = "utf-8"?>
<tutors>
<course>
<name>Android</name>
<country>India</country>
<email>contact@tutorialspoint.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>
SAX.php
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) {
globaltutors, elements;
if(!empty(name)) {
if (name == 'COURSE') {
// creating an array to store informationtutors []= 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) {
globaltutors, 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 parseri = 1;
foreach(tutors ascourse) {
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++;
}
?>
它将产生以下结果−