Bonjour,
Je developpe une application php qui a besoin de fichier de configuration.
j'utilise php 4.3.10 avec easy php.
Pour lire le fichier xml j'utilise le parser xml par default avec
xml_parser_create("iso-8889-1");
Mon but est de charger les informations dans un tableau en memoire.
Je voudrais mettre ses informations dans un tableau structurée de la manière suivante :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" encoding="iso-8859-1"?> <configuration> <colonnes nombre="3"> <colonne valeur="heure" taille="8" separateur=" " taille_separateur="1" /> <colonne valeur="statut" taille="5" separateur=" " taille_separateur="4" /> <colonne valeur="description" taille="" separateur="" taille_separateur="" /> </colonnes> </configuration>
or pour parser le fichier j'ai dû définir deux fonctions que le parseur appelle automatiquement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $tableau['COLONNE1']['VALEUR'] /* "heure" est stocké dans cette cellule */ $tableau['COLONNE1']['TAILLE'] /* 8 */ $tableau['COLONNE1']['SEPARATEUR'] /* " " */ $tableau['COLONNE1']['TAILLE_SEPARATEUR'] /* 1 */ etc...
Voici ce qu'il fait quand il rencontre une balise ouvrante :
Le problème avec ce code (qui me semble logique) est que le tableau ne contient qu'une seule ligne (la dernière) car le tableau est réécrasé à chaque appel de la fonction à cause de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 function baliseOuvrante($parser, $name, $attrs) { global $tableauEntete; $tableau = array(); static $i = 0; /* La variable est globale car on doit l'utiliser dans la suite */ //global $tableauTaille = array(); /* On recherche la balise qui nous interesse à savoir separateur et on souhaite avoir * l'attribut taille. Celui-ci se trouve dans le tableau associatif $attrs */ if($name == "COLONNES") { $nbColonne = intval($attrs['NOMBRE']); } if ($name == "COLONNE") { $tableau['COLONNE'.$i]['VALEUR'] = $attrs['VALEUR']; $tableau['COLONNE'.$i]['TAILLE'] = intval($attrs['TAILLE']); $tableau['COLONNE'.$i]['SEPARATEUR'] = $attrs['SEPARATEUR']; $tableau['COLONNE'.$i]['TAILLE_SEPARATEUR'] = intval($attrs['TAILLE_SEPARATEUR']); $i++; }
Mais le problème persiste si je met le tableau en variable "globale" au dessus de la fonction, celui-ci ne se rempli pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 global $tableauEntete; $tableau = array();
Comment faire pour résoudre le problème.
Merci d'avance pour vos réponses.
Partager