Current Location: Home> Latest Articles> Analysis of similarities and differences and advantages and disadvantages between xml_parse and simplexml_load_string

Analysis of similarities and differences and advantages and disadvantages between xml_parse and simplexml_load_string

M66 2025-05-13

In PHP, there are many ways to process XML data, among which xml_parse() and simplexml_load_string() are the two most common methods. Although both of these can implement parsing XML, there are significant differences in usage, underlying mechanisms, flexibility, etc. This article will analyze them from three aspects: their basic use, similarities and differences, and their respective advantages and disadvantages.

1. Basic introduction and usage

1. Introduction to xml_parse()

xml_parse() is one of the underlying XML parsers provided by PHP, which is parsed based on the event-driven (SAX) model. When the parser encounters the start tag, the end tag and the character data, it will call the callback function you defined in advance.

Sample code:

 function startElement($parser, $name, $attrs) {
    echo "Start tag: $name\n";
}

function endElement($parser, $name) {
    echo "End tag: $name\n";
}

function characterData($parser, $data) {
    echo "content: " . trim($data) . "\n";
}

$xmlData = <<<XML
<note>
    <to>User</to>
    <from>Admin</from>
    <message>Welcome to visit http://m66.net</message>
</note>
XML;

$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

if (!xml_parse($parser, $xmlData, true)) {
    die("XML Parsing error: " . xml_error_string(xml_get_error_code($parser)));
}
xml_parser_free($parser);

2. Introduction to simplexml_load_string()

In contrast, simplexml_load_string() is a DOM-based parsing method. It parses the entire XML document into an object, and developers can access XML nodes like they access arrays or object properties, making it more intuitive to use.

Sample code:

 $xmlData = <<<XML
<note>
    <to>User</to>
    <from>Admin</from>
    <message>Welcome to visit http://m66.net</message>
</note>
XML;

$xml = simplexml_load_string($xmlData);
echo "Recipient: " . $xml->to . "\n";
echo "Sender: " . $xml->from . "\n";
echo "information: " . $xml->message . "\n";

2. Comparison of similarities and differences between the two

characteristic xml_parse() simplexml_load_string()
Analysis method Event-driven (SAX) Object-based (DOM)
Memory usage Less (suitable for large documents) More (the entire XML is loaded into memory)
Ease of use Need to custom callback functions, which are more complicated Similar to array/object access, simple and intuitive
Scalability Flexible but complex Simple but limited scalability
Error handling Manual judgment error Better built-in processing
Supported PHP versions PHP 4 and above PHP 5 and above

3. Pros and cons analysis

1. Pros and cons of xml_parse()

advantage:

  • It consumes less memory and is suitable for parsing large XML files.

  • More underlying and flexible, allowing fine control of XML content.

  • More suitable for streaming data processing, such as RSS streams or log files.

shortcoming:

  • The encoding is complex and requires the definition of multiple callback functions.

  • Not friendly to novices and poor readability.

  • Low development efficiency and difficult debugging.

2. Pros and cons of simplexml_load_string()

advantage:

  • Simple to use, clear syntax, and easy to develop quickly.

  • Supports XPath query to enhance data extraction capabilities.

  • Suitable for small and medium-sized XML files and well-structured data.

shortcoming:

  • Parsing the entire document takes up a lot of memory.

  • Weak fault tolerance to exceptional XML structures.

  • Not suitable for handling ultra-large or dynamic streaming XML data.

4. Use suggestions

  • When you are dealing with large XML files or need to process data line by line , it is recommended to use xml_parse() .

  • When the XML data structure is simple and the data volume is not large, using simplexml_load_string() can greatly improve development efficiency.