The Expat parser is an event-driven parser.
Consider the following XML fragment:
<from>Jani</from> |
An event-based parser processes the XML as a series of three events:
from
Jani
from
The XML Expat parser functions are included in the PHP core, so no additional installation is required to use them.
The example below uses the XML file “note.xml”:
<?xml version=”1.0″ encoding=”UTF-8″?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don’t forget me this weekend!</body> </note> |
We need to initialize the XML Expat Parser in PHP, set up handlers for various XML events, and then parse the XML file.
<?php // Initialize the XML parser $parser=xml_parser_create(); // Function to use at the start of an element function start($parser,$element_name,$element_attrs) { switch($element_name) { case “NOTE”: echo “– Note –<br>”; break; case “TO”: echo “To: “; break; case “FROM”: echo “From: “; break; case “HEADING”: echo “Heading: “; break; case “BODY”: echo “Message: “; } } // Function to use at the end of an element function stop($parser,$element_name) { echo “<br>”; } // Function to use when finding character data function char($parser,$data) { echo $data; } // Specify element handler xml_set_element_handler($parser,“start”,“stop”); // Specify data handler xml_set_character_data_handler($parser,“char”); // Open XML file $fp=fopen(“note.xml”,“r”); // Read data while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf(“XML Error: %s at line %d”, xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } // Free the XML parser xml_parser_free($parser); ?> |
Explanation of the example:
xml_parser_create()
.xml_set_element_handler()
to specify the functions for opening and closing tag events.xml_set_character_data_handler()
to specify the function for handling character data.xml_parse()
.xml_error_string()
to convert XML error codes into textual descriptions.xml_parser_free()
to free the memory allocated by xml_parser_create()
.