Muchas veces debemos almacenar datos en un XML para su posterior uso. Para cumplir esta necesidad, tendremos que convertir los datos a XML y guardar el archivo XML. En este tutorial vamos a discutir sobre cómo crear un XML a partir de un array en PHP. Para ello hemos creado un script muy sencillo que convierte un array de PHP a XML. Puedes convertir todo tipo de arrays, desde arrays asociativos, hasta arrays multidimensionales.
Array PHP
Antes que nada, vamos a ver almacenar los datos de unos usuarios dentro de la variable $users_array.
$users_array = array(
"total_users" => 3,
"users" => array(
array(
"id" => 1,
"name" => "Nitya",
"address" => array(
"country" => "India",
"city" => "Kolkata",
"zip" => 700102,
)
),
array(
"id" => 2,
"name" => "John",
"address" => array(
"country" => "USA",
"city" => "Newyork",
"zip" => "NY1234",
)
),
array(
"id" => 3,
"name" => "Viktor",
"address" => array(
"country" => "Australia",
"city" => "Sydney",
"zip" => 123456,
)
),
)
);
Array a XML
Ahora vamos a convertir el array de usuario a XML mediante PHP gracias a la librerÃa SimpleXML.
//function defination to convert array to xml
function array_to_xml($array, &$xml_user_info) {
foreach($array as $key => $value) {
if(is_array($value)) {
if(!is_numeric($key)){
$subnode = $xml_user_info->addChild("$key");
array_to_xml($value, $subnode);
}else{
$subnode = $xml_user_info->addChild("item$key");
array_to_xml($value, $subnode);
}
}else {
$xml_user_info->addChild("$key",htmlspecialchars("$value"));
}
}
}
//creating object of SimpleXMLElement
$xml_user_info = new SimpleXMLElement("<?xml version="1.0"?><user_info></user_info>");
//function call to convert array to xml
array_to_xml($users_array,$xml_user_info);
//saving generated xml file
$xml_file = $xml_user_info->asXML('users.xml');
//success and error message based on xml creation
if($xml_file){
echo 'XML file have been generated successfully.';
}else{
echo 'XML file generation error.';
}
Fichero XML
El archivo users.xml contendrá el siguiente xml.
<?xml version="1.0"?>
<user_info>
<total_users>3</total_users>
<users>
<item0>
<id>1</id>
<name>Nitya</name>
<address>
<country>India</country>
<city>Kolkata</city>
<zip>700102</zip>
</address>
</item0>
<item1>
<id>2</id>
<name>John</name>
<address>
<country>USA</country>
<city>Newyork</city>
<zip>NY1234</zip>
</address>
</item1>
<item2>
<id>3</id>
<name>Viktor</name>
<address>
<country>Australia</country>
<city>Sydney</city>
<zip>123456</zip>
</address>
</item2>
</users>
</user_info>
Fuente: codexworld.com
