Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2007, 12h45   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 52
Points : 11
Points : 11
Par défaut [EXPAT] Mise en memoire d'information contenue dans un fichier XML

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.
Code XML :
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>
Je voudrais mettre ses informations dans un tableau structurée de la manière suivante :
Code :
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...
or pour parser le fichier j'ai dû définir deux fonctions que le parseur appelle automatiquement :
Voici ce qu'il fait quand il rencontre une balise ouvrante :
Code :
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++;
		}
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 :
1
2
3
 
global $tableauEntete;
$tableau = array();
Mais le problème persiste si je met le tableau en variable "globale" au dessus de la fonction, celui-ci ne se rempli pas.

Comment faire pour résoudre le problème.

Merci d'avance pour vos réponses.
websurfeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2007, 14h16   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Le mot clé global dans une fonction indique que cette variable ne sera pas locale mais désignera en fait une variable du contexte principal.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function baliseOuvrante($parser, $name, $attrs)
	{
		global $tableau;
		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++;
		}
Si j'ai bien compris l'idée, vos deux tableaux : l'un déclaré global et l'autre que vous réinitialisez ne portent pas le même nom pour commencer d'où le problème de récupération des données. Ensuite, effectivement vous ne devez pas réinitialiser le tableau sinon vous ne récupérerez à la fin que les dernières données.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h10.


 
 
 
 
Partenaires

Hébergement Web