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] xml_parse et la gestion des événements...


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut [XML] [EXPAT] xml_parse et la gestion des événements...
    Bonjour à tous.
    Je cherche à utiliser le parseur XML de PHP sur un design pattern Monteur.
    Grosso modo, la classe Directeur est chargée de lire le fichier XML, le parse et envoie les infos ad hoc au Monteur, qui les traite à sa sauce.

    Structure du code pour le Directeur :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class ListeDiffDirecteur
    {
    	var $resource; // le texte xml à parser se retrouve ici...
    	var $monteur;
     
    	[...]
     
    	function getMonteur()
    	{ return $this->monteur; }
     
    	function setMonteur( $monteur )
    	{ $this->monteur = $monteur; }
    }
     
     
    class ListeDiffDirecteur_xml extends ListeDiffDirecteur
    {
    	function build()
    	{ 
    		// Préparation de l'analyseur XML
    		$parser = xml_parser_create( $this->encoding );
    		xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
    		xml_set_character_data_handler( $parser, array( $this, "innerData" ) );
    		xml_parse( $parser, $this->resource, true );
    		xml_parser_free( $parser );
    		return true;
    	}
     
     
    	function innerData( $parser, $data )
    	{
    		$this->monteur->testData( $data );
    		echo $this->monteur->getTexte()."<br>"; // on vérifie le contenu du monteur à chaque étape...
    		return true;
    	}
    }
    Structure du code pour le Monteur :
    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
     
    class ListeDiffMonteur
    {
    	var $texte;
     
    	function ListeDiffMonteur()
    	{ $this->texte = ""; }
     
    	function getTexte()
    	{ return $this->texte; }
    }
     
    class ListeDiffMonteur_html extends ListeDiffMonteur
    {
    	function testData( $data )
    	{ $this->texte .= "$data\n"; }
    }
    Le code de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // 1 - on analyse
    $dir = new ListeDiffDirecteur_xml();	
    $dir->setMonteur( new ListeDiffMonteur_html() );
    $dir->build();
    // 2 - on affiche le résultat
    $mt = $dir->getMonteur();
    $txt = $mt->getTexte();
    echo "[texte]<br>==>>$txt<<==<br>[/texte]<br>";
    Structure de l'affichage en sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bla
    blabla 
    blablabla
    ... 
    // etc... on voit donc que le $texte du monteur stocke bien les contenus textuels envoyés par xml_parse et le gestionnaire d'événement
    // mais en fin de traitement, on affiche : 
    [texte]==><==[/texte]
    // le texte du monteur est vide à présent...
    Question : qu'est-ce qui provoque la disparition du texte ?

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    si tu es en php 4, met des références a chaque fois que tu récupère et/ou envoit un objet

  3. #3
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Je connais le passage par référence. Cela ne répond pas à ma question.

    J'ai fait quelques tests complémentaires, en particulier en éliminant la classe Monteur et en stockant le texte dans la classe Directeur. Les résultats sont les mêmes. Mon hypothèse est donc que le parseur XML prend une copie de l'objet qu'on lui passe (en tant que "this" du gestionnaire d'événement).

    Je contourne le problème en stockant le texte fabriqué dans un fichier temporaire. Rien de bien grave donc, mais tout de même, ils pourraient documenter ce genre de comportements, dans la doc PHP...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Gestion des évènements dans PHP
    Par haffouff dans le forum Langage
    Réponses: 5
    Dernier message: 25/04/2006, 18h51
  2. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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