Bonjour,
J'ai une variable contenant une structure arborescente en perl, c'est à dire l'arbre contient des éléments dont chaque élément possède des fils. Pour mieux expliquer, mon arbre est défini d'une façon récursive.
Je vous donnerez ci_après une vue à propos de mon arbre.
Voila la classe définissant mon arbre.
Mon problème est que après la création des objets de la classe arbre, je voulais enregistrer ces objets pour pouvoir les utiliser après, alors moi ce que j'ai utilisé comme méthode est l'astuce qui permet de convertir une structure perl sous forme d'un fichier xml. À cet effet, j'ai utilisé la méthode XML::Simple. Dans ce qui suit, vous trouverez un programme principal illustrant bien mon problème.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 package arbre; use warnings; use Data::Dumper; use strict; my $nbre_noeuds = 0; my $nbre_feuilles = 0; my $nbre_fils = 0; sub new { my ($class,$nom,$type) = @_; my $this = {}; bless($this, $class); $this->{DEBUT} = undef; $this->{FIN} = undef; $this->{NAME} = $nom; $this->{TYPE} = $type; $this->{TYPE_DATA} = undef; $this->{ _REGLE_G } = undef; $this->{ _REGLE_D } = undef; $this->{RESULTAT} = []; $this->{FILS} = []; $this->{PARENT} = undef; $this->{DELDEBUT_G} = undef; $this->{DELFIN_G} = undef; $this->{DELDEBUT_D} = undef; $this->{DELFIN_D} = undef; $this->{EXEMPLE_G} = []; $this->{EXEMPLE_D} = []; $this->{OCCURENCE} = []; $nbre_noeuds++; return $this; } sub inserer_fils { my ($this,$tree) = @_; push @{$this->{FILS}}, $tree; $tree->{PARENT}=$this; $nbre_fils++; } sub ajouter_noeud_fils { my ($this,$nom_parent,$nom_noeud,$type_noeud) = @_; if ($nom_parent eq $this->{NAME}) { my $t = arbre->new($nom_noeud,$type_noeud); $this->inserer_fils($t); $t->{NAME} = $nom_noeud; $t->{TYPE} = $type_noeud; } else { foreach my $v ( @{$this->{FILS}} ) { if ($nom_parent eq $v->{NAME}) { my $t = modelexml->new($nom_noeud,$type_noeud); $v->inserer_fils($t); $t->{NAME} = $nom_noeud; $t->{TYPE} = $type_noeud; $t->ajouter_noeud_fils($nom_parent,$nom_noeud,$type_noeud); } } } } 1;
Programme principal:
je n'ai pas réussi à créer le fichier xml représentant la structure d'arbre. Et ce que j'ai compris c'est que cette méthode marche bien quand on utilise une structure tableau, alors pour le convertir en fichier xml, il suffit juste d'appeler la méthode XMLout utilisant comme paramètre une référence vers ce tableau:
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
38
39
40
41
42 use arbre; use strict; use warnings; use Data::Dumper; use Clone qw(clone); use XML::Simple; my $t = arbre->new('ListePricipale','liste');#La racine de l arbre representant le noeud principal Liste $t->{DEBUT} = 1.12; $t->{FIN} = 1000.234; print"L'AFFICHAGE DE L'ARBRE AVANT L'INSERTION\n"; print Dumper($arbre)."\n"; $nom_parent = "ListePricipale"; $nom_noeud = "tuple"; $type_noeud = "TUPLE"; #Insertion du noeud tuple à la racine de l'arbre $t->ajouter_noeud_fils($nom_parent,$nom_noeud,$type_noeud); #Ajout des attributs pour le noeud tuple $t->{FILS}->[0]->{DEBUT} = 13.20; $t->{FILS}->[0]->{FIN} = 500.4; #Insertion du noeud feuille au noeud tuple $t->ajouter_noeud_fils($t->{FILS}->[0]->{NAME},'feuille','FEUILLE'); #Ajout des attributs pour le noeud feuille $t->{FILS}->[0]->{FILS}->[0]->{DEBUT} = 300.1; $t->{FILS}->[0]->{FILS}->[0]->{FIN} = 400.12; #Création d'une copie de l'arbre $t my $copie_t = clone($t); # créer un objet xml $xml = new XML::Simple (NoAttr=>1, RootName=>'data'); # convertir la référence de la copie d'arbre en document XML $data = $xml->XMLout($copie_t); # accéder aux données XML print Dumper($data);
$data = $xml->XMLout(\@tableau);
Donc, s'il vous plait si quelqu'un pourrez m'aider de lever ce problème j'attends avec impatience la réponse.
Merci à vous tous.
Partager