PHP XML Expat parser

PHP XML Expat parser

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

What is XML?

XML is eXtensible Markup Language. Tags refer to information symbols that computers can understand. Through such tags, computers can process articles containing various information. How to define these tags, you can choose an internationally accepted markup language, such as HTML, or you can use a markup language like XML that is freely decided by the relevant people. This is the extensibility of the language. XML is simplified and modified from SGML. It mainly uses XML, XSL and XPath, etc.

The above paragraph is a basic definition of XML, a widely accepted explanation. Simply put, XML is a data description language. Although it is a language, it usually does not have the basic function of a common language - to be recognized and run by computers. You can only rely on another language to interpret it so that it achieves the effect you want or is accepted by the computer.

If you are new to XML, you may not understand what XML is by definition. Maybe you can change your perspective to understand what XML is; understand XML from the application side, and understand it from what XML can do. This should be more helpful to you than the more empty definition.

XML application surfaces are mainly divided into two types, document type and data type. Here are some common XML applications:

1. Custom XML+XSLT=>HTML, one of the most common document-based applications. XML stores the XML data of the entire document, and then XSLT converts and parses the XML, combines it with the HTML tags in XSLT, and finally becomes HTML, which is displayed on the browser. A typical example is the post on CSDN.

2. XML is a micro database, which is one of the most common data-based applications. We use relevant XML APIs (MSXML DOM, JAVA DOM, etc.) to access and query XML. In the implementation of message boards, you can often see the use of XML as the database.

3. As communication data. The most typical one is WEB SERVICE, which uses XML to transfer data.

4. As configuration information data for some applications. Common ones are web.XML used when J2EE configures the WEB server.

5. XML format of some other documents. Such as WORD, EXCEL, etc.

6. Save the mapping relationship between data. Such as Hibernate.

The 6 applications introduced here basically cover the main uses of XML. In short, XML is an abstract language that is not as concrete as traditional programming languages. To understand it in depth, you should start with its application, choose a use you need, and then learn how to use it.

XML is used to describe data, and its focus is what the data is. XML files describe the structure of data.

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

To learn more about XML, visit our XML tutorial.

What is Expat?

Expat is a stream-oriented parser. You register a parser callback (or handler) function and then start searching its documentation. When the parser recognizes the specified location of the file, it calls the corresponding handler for that part (if you have registered one). The file is fed to the parser, where it is split into multiple fragments and loaded into memory. So expat can parse those huge files.

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 parsers: This parser converts XML documents into a tree structure. It analyzes the entire document and provides access to elements in the tree, such as the Document Object Model (DOM).

·          Event-based parser: Treat XML documents as a series of events. When a specific event occurs, the parser calls a function to handle it.

The Expat parser is an event-based parser.

Event-based parsers focus on the content of XML documents rather than their structure. Because of this, event-based parsers are able to access data faster than tree-based parsers.

Look at the following XML fragment:

<from>Jani</from>

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

· Starting element: from

· Starting CDATA section, value: Jani

· Closing element: from

The XML example above contains the form Good XML. However, this instance is invalid XML because there is no document type declaration (DTD) associated with it.

However, this makes no difference when using the Expat parser. Expat is a parser that does not check validity and ignores any DTD.

As an event-based, non-validated XML parser, Expat is fast and lightweight, making it ideal for PHP web applications.

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

Installation

The XML Expat parser function is an integral part of PHP core. No installation is required to use these functions.

XML file

The following XML file 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 XML parser

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

Example

<?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 above code will output:

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

How it works:

1. Initialize the XML parser through the xml_parser_create() function

2. Create functions that match different event handlers

3. Add the xml_set_element_handler() function to define when parsing Which function is executed when the parser encounters the start and end tags

4.  Add the xml_set_character_data_handler() function to define which function is executed when the parser encounters character data

5.  Through xml_parse() function to parse the file "test.xml"

6. In case there is an error, add the xml_error_string() function to convert the XML error into a text description

7. Call the xml_parser_free() function to free it Memory allocated to the xml_parser_create() function

More information about the PHP Expat parser

For more information about the PHP Expat function, please visit our PHP XML Parser Reference Manual.


Continuing Learning
||
<?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); ?>
submitReset Code