PHP XML Expat Parser
The PHP XML Expat Parser
The XML Expat Parser is an event-based parser, it views an XML document as a series of events. When an event occurs, it calls a specified function to handle it.
The XML Expat Parser is also a non-validating parser, and ignores any DTDs linked to a document. However, if the document is not well formed, it will end with an error message.
Because it is an event-based, non validating parser, the XML Expat Parser is fast and well suited for web applications.
Look at the following XML fraction:
<from>Jani</from>
An event-based parser reports the XML above as a series of 3 events:
- Start element: from
- CDATA section: Jani
- End element: from
Tip: The XML Expat Parser is a part of the PHP core. No installation is required!
PHP XML Expat Parser - Core Functions
The core functions of the XML Expat Parser is:
xml_parser_create()- Initializes the XML parserxml_set_element_handler()- Specifies which function to execute on opening and closing tagsxml_set_character_data_handler()Specifies which function to execute on character dataxml_parse()- Starts the parsing processxml_error_string()- Converts an XML error to a textual descriptionxml_parser_free()- Releases the memory allocated
Using the XML Expat Parser
The XML file "note.xml" will be used in the example below.
In the following example we define some handler functions, open the XML file, initialize the XML Expat Parser, and then parse the XML file:
Example
<?php
// Define handler functions
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 stop($parser, $element_name) {
echo "<br>";
}
function char($parser, $data) {
echo $data;
}
// Open XML file for reading
$stream = fopen("note.xml", "r");
// Initialize the XML parser
$parser = xml_parser_create();
// Set the handlers
xml_set_element_handler($parser, "start", "stop");
xml_set_character_data_handler($parser, "char");
// Read data
while ($data = fread($stream, 4096)) {
xml_parse($parser, $data, feof($stream)) 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 resource
xml_parser_free($parser);
//
Close XML file
fclose($stream);
?>
Run example »
The output of the code above will be:
-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't
forget me this weekend!
Code Explanation
- Create handler functions (start(), stop(), and char())
- Open XML file for reading with the
fopen()function - Initialize the XML parser with the
xml_parser_create()function - Set the handlers:
xml_set_element_handler()specifies which function to execute on opening and closing tags, andxml_set_character_data_handler()specifies which function to execute on character data - Parse the XML file with the
xml_parse()function - In case of an error, add
xml_error_string()function to convert an XML error to a textual description - Free the XML parser resource with the
xml_parser_free()function - Close XML file with the the
fclose()function
PHP XML Expat Parser Reference
For a complete reference of the PHP XML Expat Parser functions, visit our PHP XML Expat Parser Reference page.