Repository navigation
XMLReader
La classe XMLReader permet de lire des fichiers ou des chaînes XML et de les convertir en tableaux PHP (array). Elle est conçue pour gérer les structures complexes : listes d'éléments répétés, sections CDATA et attributs de balises.
Namespace : Magepattern\Component\XML\XMLReader
| Méthode | Paramètres | Retour | Description |
|---|---|---|---|
| toArray() | string $xml | ?array | Convertit une chaîne XML brute en tableau. |
| fromFile() | string $path | ?array | Charge un fichier .xml et le convertit. |
Cette classe adopte une structure intelligente pour ne perdre aucune donnée.
- Nœud simple
<titre>Bonjour</titre>Devient : ['titre' => 'Bonjour']
- Nœud avec Attributs Les attributs sont isolés dans une clé @attributes pour éviter les conflits.
<user id="42" role="admin">Aurelien</user>Devient :
[
'user' => [
'@attributes' => ['id' => '42', 'role' => 'admin'],
'@value' => 'Aurelien'
]
]- Listes (Éléments répétés) Le parser détecte automatiquement les répétitions et crée un tableau indexé.
<panier>
<item id="1">Pomme</item>
<item id="2">Poire</item>
</panier>Devient :
[
'item' => [
0 => ['@attributes' => ['id' => '1'], '@value' => 'Pomme'],
1 => ['@attributes' => ['id' => '2'], '@value' => 'Poire']
]
]Exemple Complet : XML vers JSON C'est ici que la puissance du framework se révèle. Vous lisez le XML avec XMLReader, puis vous le convertissez proprement avec JSON.
use Magepattern\Component\XML\XMLReader;
use Magepattern\Component\HTTP\JSON;
// 1. Lecture du XML (avec attributs)
$data = XMLReader::fromFile('export_users.xml');
// 2. Traitement éventuel en PHP
if (isset($data['user'])) {
foreach ($data['user'] as &$u) {
// On modifie une donnée avant l'export
$u['@attributes']['checked'] = 'true';
}
}
// 3. Conversion finale en JSON
$jsonTool = new JSON();
$jsonString = $jsonTool->encode($data);
echo $jsonString;- Lire une chaîne XML
use Magepattern\Component\XML\XMLReader;
$xml = '<?xml version="1.0"?>
<user>
<id>10</id>
<name>Aurelien</name>
<role>Admin</role>
</user>';
$data = XMLReader::toArray($xml);
echo $data['name']; // Affiche: Aurelien- Gérer les listes (nœuds multiples) Si le XML contient plusieurs balises identiques, la classe les regroupe automatiquement dans un sous-tableau.
$data = XMLReader::fromFile('flux_actualites.xml');
foreach ($data['item'] as $item) {
echo $item['title'];
}LibXML Flags : Utilise LIBXML_NOCDATA pour fusionner les sections CDATA dans les nœuds de texte, évitant ainsi des structures de tableaux trop complexes.
Erreurs : En cas de XML mal formé, la classe retourne null et enregistre l'erreur dans le Logger système, évitant ainsi un crash de l'application.