Bonjour tt les monde
j'ai un petit souci.
j'ai une fichier XML
j'ai créer un petit programme en perl TK qui affiche mon fichier sous format d'arbre ensuite je ve afficher et modifier queleques valeur entre les balise en utilisant mon interface tk mais j'arrive pas.
voila le code:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
 
#!/usr/bin/perl -w
 
use Tk;
use XML::Parser;
require Tk::HList;
use Tk::LabFrame;
 
my $main;
my $status;
my $list;
my @xmllist;
 
create_ui();
 
my $parser = new XML::Parser(Style => 'tree');
@xmllist = $parser->parsefile("yatea.xml");
fill_list(@xmllist);
 
MainLoop();
 
#---------------------------------------------------------------------------
#  Subroutines
#---------------------------------------------------------------------------
 
my @tags;
my %tag_count;
 
sub fill_list {
    my $xml = shift;
    my $tag;
    my $value;
 
    while (@$xml) {
	$tag   = shift @$xml;
	$value = shift @$xml;
 
	if ($tag) {
	    $tag_count{$tag}++;
	    push @tags, $tag . "." . $tag_count{$tag};
 
	    $list->add(
		get_name(),
		-text       => $tag,
		-data       => shift @$value,
		-itemtype   => 'text',
	    );
 
	    fill_list($value);
 
	    pop @tags;
	} else {
	    my $text = $value =~ s/\s+/ /g;
 
	    $tag_count{"_value_"}++;
 
	    $list->add(
		get_name() . "|value." . $tag_count{"_value_"},
		-text       => "Value: " . $value,
		-itemtype   => 'text',
	    );
	}
    }
}
 
 
 
sub get_name {
    my $name = join '|', @tags;
    return $name;
}
 
sub create_ui {
    $main = MainWindow->new;
 
    my $menu_bar = $main->Frame()->pack(-side => 'top');
 
    $list = $main->Scrolled(
	'HList',
	-drawbranch => 1,
	-separator  => '|',
	-indent     => 15,
	-height     => 20,
	-width      => 70,
    )->pack(
	-fill       => 'both',
	-expand     => 'y',
    );
 
    $status = $main->Frame()->pack(-side => 'bottom');
    $status->Label(
	-text => 'Status:'
    )->pack(
	-side => 'left',
	-padx => 2,
    );
    $status->Label(
	-width  => 70,
	-relief => 'sunken',
    )->pack(
	-fill => 'x',
	-padx => 2,
	-pady => 2,
    );
 
	#---------------------création zone en bas ---------
	my $w_framePrincipale = $main->LabFrame(-label => "Correct term", -labelside => 'acrosstop', ); 
	$w_framePrincipale->pack(-side => 'left',-ipadx=>251 , -ipady=>15 );
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
	#---------------------création zone à Gauche ---------
	my $w_frameGauche = $w_framePrincipale->LabFrame(-label => "Edit", -labelside => 'acrosstop', ); 
	$w_frameGauche->pack(-side => 'left', -ipadx=>125 , -ipady=>13 );
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	#---------------------création zone à droite ---------
	my $w_frameDroite = $w_framePrincipale->LabFrame(-label => "Comment", -labelside => 'acrosstop', ); 
	$w_frameDroite->pack(-side => 'right', -ipadx=>225 , -ipady=>15 );
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
	#---------------------création zone validity ---------
 
	my ($valid1); 
	my $w_frame1 = $w_frameGauche->LabFrame(-label => "Validity", -labelside => 'acrosstop');	 
	$w_frame1->Radiobutton(-text => "Yes", -variable => \$valid1, -value => "Yes" ,)->grid( 
	$w_frame1->Radiobutton(-text => "No", -variable => \$valid1, -value => "No" ,),
	$w_frame1->Radiobutton(-text => "Unknown", -variable => \$valid1, -value => "Unknown", ),); 
	$w_frame1->pack();
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
	#-------------------création zone correction---------------
	my $w_frame2 = $w_frameGauche->Frame(); 
	$w_frame2->Label(-text => 'New' )->pack(-side=>'left'); 
	my $w_entry1 = $w_frame2->Entry(-relief => 'sunken', -width=>20); 
	$w_entry1->pack(-padx => 7, -pady => 7, -side=>'left');  
    $w_frame2->Button(-text => 'correct', -command => sub { exit; }, )->pack(-padx => 7, -pady => 7, -side=>'left'); 
	$w_frame2->pack();
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
	#-------------------création zone choix occurences----------
	my ($valid2); 
	my $w_frame3 = $w_frameGauche->LabFrame(-label => "Occurences", -labelside => 'acrosstop', ); 
	$w_frame3->Radiobutton(-text => "Validate the current occurence", -variable => \$valid2, -value => "Linux", )->pack(-anchor => 'w'); 
	$w_frame3->Radiobutton(-text => "Validate all occurences", -variable => \$valid2, -value => "Unix", )->pack(-anchor => 'w'); 
	$w_frame3->pack();
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	#-------------------création zone choix occurences----------
	my ($valid4); 
	my $w_frame4 = $w_frameGauche->LabFrame(-label => "Synhtaxic analys", -labelside => 'acrosstop', ); 
 
	$w_frame4->Label(-text => 'Head' )->pack(-side=>'left'); 
	my $w_entry5 = $w_frame4->Entry(-relief => 'sunken', -width=>20); 
	$w_entry5->pack(-padx => 7, -pady => 7, -side=>'left');  
	$w_frame4->Label(-text => 'Modifier' )->pack(-side=>'left'); 
	my $w_entry6 = $w_frame4->Entry(-relief => 'sunken', -width=>20); 
	$w_entry6->pack(-padx => 7, -pady => 7, -side=>'left'); 
 
	$w_frame4->Button(-text => 'Update', -command => sub { exit; }, )->pack(-padx => 7, -pady => 7, -side=>'left');
	$w_frame4->pack();
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
	#--------------------bouton validation terme finale---------------
	$w_frameGauche->Button(-text => "Cancel", -width => 10, -command => sub { exit 0; }, )->pack(-padx => 5, -pady => 5, -side => 'right');
	$w_frameGauche->Button(-text => "Ok", -width => 10, -command => sub { exit 0; }, )->pack(-padx => 5, -pady => 5, -side => 'right'); 
	#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
		#-------------------création zone commentaire---------------
	#my ($valid3); 
	#my $w_frame = $w_framePrincipale->LabFrame(-label => "Commentary", -labelside => 'acrosstop', ); 
	my $w_comment = $w_frameDroite->Text(qw/-width 61 -height 13/)->pack(-side=>'left');
	#$w_frame->pack(-side => 'right');
	#--------------------bouton commentaires---------------
	$w_frameDroite->Button(-text => "Update", -width => 10, -command => sub { exit 0; }, )->pack(-padx => 5, -pady => 5, -side => 'bottom');
}
voila un iprm ecran :
http://majed-bourassine.awardspace.com/parse.html

voila mon fichier xml d'entree:
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
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE TERM_EXTRACTION_RESULTS SYSTEM "extracteurDeTermes.dtd">
 
<TERM_EXTRACTION_RESULTS>
  <LIST_TERM_CANDIDATES>
    <TERM_CANDIDATE>
      <ID>terme196</ID>
      <FORM>cotC promoter region</FORM> <!--#doit etre afficher dans la zone texte new-->
      <LEMMA>cotC promoter region</LEMMA>
      <NUMBER_OCCURRENCES>1</NUMBER_OCCURRENCES>
      <TERM_CONFIDENCE>5</TERM_CONFIDENCE><!-- doit etre modifier en 0 si on choisit non valide ds la formulaire et a 1 si on choisit valide-->
      <SYNTACTIC_ANALYSIS>
        <HEAD>
        terme195  <!--doit etre afficher dans la zone texte head-->
        </HEAD>
        <MODIFIER POSITION="BEFORE">
        terme38 <!--doit etre afficher dans la zone texte Modifier-->
        </MODIFIER>
      </SYNTACTIC_ANALYSIS>
    </TERM_CANDIDATE>
  </LIST_TERM_CANDIDATES>
</TERM_EXTRACTION_RESULTS>
en fete ds mon fichier xml ya bcp de terme condidat chaque fois je clique sur un terme condidat il m'affiche ds la zone de correction ds l'interface graphique ds la zone texte new (c'est qui est entre form et form) et ds le head le continue de la balise head(terme195) et modifier c'est la meme chose(terme38) ensuite si j'ai choisi valide change le valeur entre terme confidence en 1 et si non valide 0 et si unknown garde la valeur actuel, en plus je ve faire la mise ajour et modifier la fichier xml a parir de l'interface ou enregistrer ds sous un autre fichier xml