SimpleXML is a tree-based parser that simplifies retrieving an element’s name, attributes, and textual content if the XML document’s structure is known.
It converts an XML document into a data structure that can be iterated like arrays and objects.
Compared to DOM or the Expat parser, SimpleXML requires fewer lines of code to read text data from elements.
Starting with PHP 5, SimpleXML functions are included in the PHP core, so no additional installation is needed to use them.
The PHP simplexml_load_string() function is used to read XML data from a string.
For example, if you have a variable containing XML data, it would look like this:
$myXMLData = “<?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>“; |
The example below demonstrates how to use the simplexml_load_string()
function to read XML data from a string:
<?php $myXMLData = “<?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>“; $xml=simplexml_load_string($myXMLData) or die(“Error: Cannot create object”); print_r($xml); ?> |
The output of the code above will be:
SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don’t forget me this weekend! ) |
Error Handling Tip: Utilize libxml functionality to retrieve all XML errors when loading a document and then iterate through the errors. The following example demonstrates this by attempting to load a broken XML string:
<?php libxml_use_internal_errors(true); $myXMLData = “<?xml version=’1.0′ encoding=’UTF-8′?> <document> <user>John Doe</wronguser> <email>[email protected]</wrongemail> </document>“; $xml = simplexml_load_string($myXMLData); if ($xml === false) { echo “Failed loading XML: “; foreach(libxml_get_errors() as $error) { echo “<br>“, $error->message; } } else { print_r($xml); } ?> |
The output of the code above will be:
Failed loading XML: Opening and ending tag mismatch: user line 3 and wronguser Opening and ending tag mismatch: email line 4 and wrongemail |
The PHP simplexml_load_file()
function is used to read XML data from a file.
For example, if you have an XML file named “note.xml” that looks like this:
<?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> |
The example below illustrates how to use the simplexml_load_file()
function to read XML data from a file:
<?php $xml=simplexml_load_file(“note.xml”) or die(“Error: Cannot create object”); print_r($xml); ?> |
The output of the code above will be:
SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don’t forget me this weekend! ) |
Tip: The next chapter will demonstrate how to retrieve node values from an XML file using SimpleXML!