Escribiendo y leyendo XML en PHP

Escribiendo y leyendo XML en PHP

 

A veces es de mucha utilidad usar archivos en formato XML, ya sea para guardar datos o para importarlos, es un sistema antiguo desarrollado por IBM muy bien implementado en PHP.

 

Digamos que queremos devolver desde PHP un XML llamado empleados.xml como este:

<?xml version="1.0" encoding="iso-8859-1"?>
 <employees>
   <employee>
    <name>Mark</name>
    <age>27</age>
    <salary>$5000</salary>
   </employee>
   <employee>
    <name>Jack</name>
    <age>25</age>
    <salary>$4000</salary>
   </employee>
 </employees>

Para ello lo primero que hariamos sería optener el array PHP de los datos:

 

$employees = array(); $employees [] = array( 'name' => 'Albert', 'age' => '34', 'salary' => "$10000" ); $employees [] = array( 'name' => 'Claud', 'age' => '20', 'salary' => "$2000" ); 

 

Ahora no queda mas que meternos en el array con un par de bucles y escribir el resultado:

 

$doc = new DOMDocument(); $doc->formatOutput = true;
$r = $doc->createElement( "employees" );
 $doc->appendChild( $r );
foreach( $employees as $employee )
 {
 $b = $doc->createElement( "employee" );
$name = $doc->createElement( "name" );
 $name->appendChild(
 $doc->createTextNode( $employee['name'] )
 );
 $b->appendChild( $name );
$age = $doc->createElement( "age" );
 $age->appendChild(
 $doc->createTextNode( $employee['age'] )
 );
 $b->appendChild( $age );
$salary = $doc->createElement( "salary" );
 $salary->appendChild(
 $doc->createTextNode( $employee['salary'] )
 );
 $b->appendChild( $salary );
$r->appendChild( $b );
 }
echo $doc->saveXML();
 $doc->save("write.xml");

 

 

Como veis con eso hemos escrito el resultado en XML al archivo write.xml en la carpeta del script, no hace falta mencionar que la carpeta del script devería tener permisos de escritura para apache claro.

 

Si necesitarais importar este mismo XML sería tan sencillo como lo siguiente:

 <?php $doc = new DOMDocument(); $doc->load( 'employees.xml' );
$employees = $doc->getElementsByTagName( "employee" );
 foreach( $employees as $employee )
 {
 $names = $employee->getElementsByTagName( "name" );
 $name = $names->item(0)->nodeValue;
$ages= $employee->getElementsByTagName( "age" );
 $age= $ages->item(0)->nodeValue;
$salaries = $employee->getElementsByTagName( "salary" );
 $salary = $salaries->item(0)->nodeValue;
echo "<b>$name - $age - $salary\n</b><br>";
 }
 ?> 

Comparte este artículo