Le code ci-dessous traite un fichier XML qui ne contient pas d'attributs. Code créé à partir de cette page : http://bookofzeus.com/articles/convert-simplexml-object-into-php-array/
Le fichier initial ressemble à ceci :
<vals>
<val>
<valUnique>toto</valUnique>
<valUnique2>titi</valUnique2>
<sousVal>
<sousValUnique>a</sousValUnique>
<sousValUnique2>b</sousValUnique2>
</sousVal>
<sousVal>
<sousValUnique>c</sousValUnique>
<sousValUnique2>d</sousValUnique2>
</sousVal>
</val>
<val>(...)</val>
</vals>
Le résultat sera le suivant :
array [0] ['val'] ['valUnique']
['valUnique2']
[0] ['sousVal']['sousValUnique']
['sousValUnique2']
[1] ['sousVal']['sousValUnique']
['sousValUnique2']
[1] ['val'] (...)
class Xml {
/**
* Fonction permettant de charger un fichier xml, et de récupérer le
* tableau correspondant
* Les objets imbriqués sont stockés dans un tableau de type :
* array [0] ['val'] ['valUnique']
* ['valUnique2']
* [0] ['sousVal']['sousValUnique']
* ['sousValUnique2']
* [1] ['sousVal']['sousValUnique']
* ['sousValUnique2']
* [1] ['val'] (...)
* La fonction ne gère pas les attributs
*
* @param string $fileName : adresse du fichier à charger
* @return array
*/
function loadFile($fileName) {
$dataXml = simplexml_load_file ( $fileName );
$data = $this->xml2array ( $dataXml );
return $data;
}
/**
*
* @param SimpleXMLElement $xml
* @return array
*/
function xml2array($xml) {
$res = array ();
$i = 0;
foreach ( $xml as $kelement => $element ) {
$key = $element->getName ();
$e = get_object_vars ( $element );
if (! empty ( $e )) {
if ($element instanceof SimpleXMLElement) {
$res [$i] [$key] = $this->xml2array ( $element );
$i ++;
} else {
$res [$key] = $e;
}
} else
$res [$key] = trim ( $element );
}
return $res;
}
}