IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] [EXPAT] Mise en memoire d'information contenue dans un fichier XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Points : 50
    Points
    50
    Par défaut [XML] [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 : 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>
    Je voudrais mettre ses informations dans un tableau structurée de la manière suivante :
    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...
    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 : 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++;
    		}
    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
     
    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.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 : 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
    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.

Discussions similaires

  1. Lecture des informations contenues dans les fichiers CDA de Windows
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 12h53
  2. Récupération des informations contenues dans un fichier
    Par dream_of_australia dans le forum Débuter
    Réponses: 16
    Dernier message: 08/07/2009, 17h47
  3. Sauver et restaurer des informations contenues dans un fichier
    Par lilimilou29 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/06/2007, 20h08
  4. Réponses: 15
    Dernier message: 02/12/2005, 17h12
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo