XML (Extensible Markup Language) is a markup language that encodes documents in a machine-readable and human-readable format. Generally, XML is used to store and transport data.
You can use XML many ways in the web application. If you’re concerned about database size and want to reduce database uses, XML can help you to free the space from the database. Instead of the database you can store the data in the XML file and retrieve data from XML file without connecting to the database.
In this tutorial, we will show you how to convert PHP associative or multidimensional array to XML and stored in the XML file. Also, the example code shows how to parse the XML file and convert XML data to array in PHP.
createXML() Function:
For better usability, all the Array to XML conversion code will be grouped together in a PHP function. The createXML()
function converts PHP multidimensional array to XML file. The data array needs to be passed as a parameter in createXML()
function. The createXML()
function create an XML document using DOMDocument class and insert the PHP array content in this XML document. At the end, the XML document is saved as an XML file in the specified file path.
function createXML($data) {
$title = $data['title'];
$rowCount = count($data['users']);
//create the xml document
$xmlDoc = new DOMDocument();
$root = $xmlDoc->appendChild($xmlDoc->createElement("user_info"));
$root->appendChild($xmlDoc->createElement("title",$title));
$root->appendChild($xmlDoc->createElement("totalRows",$rowCount));
$tabUsers = $root->appendChild($xmlDoc->createElement('rows'));
foreach($data['users'] as $user){
if(!empty($user)){
$tabUser = $tabUsers->appendChild($xmlDoc->createElement('user'));
foreach($user as $key=>$val){
$tabUser->appendChild($xmlDoc->createElement($key, $val));
}
}
}
header("Content-Type: text/plain");
//make the output pretty
$xmlDoc->formatOutput = true;
//save xml file
$file_name = str_replace(' ', '_',$title).'_'.time().'.xml';
$xmlDoc->save("files/" . $file_name);
//return xml file name
return $file_name;
}
PHP Multidimensional Array
The following multidimensional array will save as XML file using PHP
$data = array(
'title' => 'Users Information',
'users' => array(
array('name' => 'John Doe', 'email' => 'john@doe.com'),
array('name' => 'Merry Moe', 'email' => 'merry@moe.com'),
array('name' => 'Hellary Riss', 'email' => 'hellary@riss.com')
)
);
PHP Array to XML File Conversion
You only need to use createXML()
function and pass data array in it to convert array to XML in PHP.
echo createXML($data);
The example code will create the following XML document.
<?xml version="1.0"?> <user_info> <title>Users Information</title> <totalRows>3</totalRows> <rows> <user> <name>John Doe</name> <email>john@doe.com</email> </user> <user> <name>Merry Moe</name> <email>merry@moe.com</email> </user> <user> <name>Hellary Riss</name> <email>hellary@riss.com</email> </user> </rows> </user_info>
Now we will read the XML data from file and convert the XML to array using PHP.
//xml file path
$path = "files/path-to-document.xml";
//read entire file into string
$xmlfile = file_get_contents($path);
//convert xml string into an object
$xml = simplexml_load_string($xmlfile);
//convert into json
$json = json_encode($xml);
//convert into associative array
$xmlArr = json_decode($json, true);
print_r($xmlArr);
The example code will convert the XML file to the following associative array.
Array ( [title] => Users Information [totalRows] => 3 [rows] => Array ( [user] => Array ( [0] => Array ( [name] => John Doe [email] => john@doe.com ) [1] => Array ( [name] => Merry Moe [email] => merry@moe.com ) [2] => Array ( [name] => Hellary Riss [email] => hellary@riss.com ) ) ) )
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Thank you so much for writing this one. It’s saved my time.