-
Notifications
You must be signed in to change notification settings - Fork 0
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.