Latest web development tutorials

PHP XML Expat parser

Built-in PHP Expat parser makes it possible to process XML documents.


What is XML?

XML is used to describe data and to focus on what data Yes. XML file describes the structure of the data.

In XML, there is no predefined tags. You must define your own tags.

To learn more about XML, please visit our XML tutorial .


What Expat yes?

To read and update - create and process - an XML document, you need an XML parser.

There are two basic types of XML parsers:

  • Tree-based parser: This parser transforms an XML document into a tree structure. It analyzes the entire document, and provides access to the elements in the tree, such as the Document Object Model (DOM).
  • Event-based parser: The XML document as a series of events. When a specific event occurs, the parser will call the function to process.

Expat parser is event-based parser.

Event-based parser focus on the content of an XML document, rather than their structure. Because of this, event-based parser can access data faster than tree-based parser.

Consider the following XML fragment:

<from>Jani</from>

Event-based parser reports the XML above as a series of three events:

  • Start element: from
  • Start CDATA section, value: Jani
  • Close element: from

XML example above contains well-formed XML. But this example is not valid XML, because the document type declaration (DTD) is not associated with it.

However, when using the Expat parser, this makes no difference. Expat parser is not checked for validity, ignore any DTD.

As an event-based, non-validating XML parser, Expat fast and lightweight, very suitable for PHP Web applications.

Note: XML document must be well-formed, otherwise Expat will generate an error.


installation

XML Expat parser functions are part of the PHP core. No installation needed to use these functions.


XML file

The XML file below will be used in our example:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


Initialize the XML parser

We want to initialize the XML parser in PHP, define processor for different XML events, and then parse the XML file.

Examples

<?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("test.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);
?>

The code above will output:

-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

working principle:

  1. By xml_parser_create () function initializes the XML parser
  2. Create with different event handler function
  3. Add xml_set_element_handler () function to define, which function to perform when the parser encounters the start and end tags
  4. Add xml_set_character_data_handler () function to define, which function to perform when the parser encounters character data
  5. By xml_parse () function to parse the file "test.xml"
  6. In case there is an error, then add xml_error_string () function to convert XML error text description
  7. Call xml_parser_free () function to release assigned to xml_parser_create () function memory

More information PHP Expat parser

For more information about PHP Expat functions, visit our PHP XML Parser Reference Manual .