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:
fromJanifromThe 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().