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 :
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
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; } }
Le code de test :
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"; } }
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 // 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>";
Question : qu'est-ce qui provoque la disparition du texte ?
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...
Partager