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

Langage Perl Discussion :

modifier file xml à partir de perl TK


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut modifier file xml à partir de perl TK
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 45
    Points
    45
    Par défaut
    Salut,
    Pour tous ce qui est modification de fichier XML et même le parsing, je te recommande plustôt d'utiliser des librairies comme XML::Twig ou encore XML::Simple (même si j'ai un large préférence pour la première).
    En ce qui concerne ton problème, tu dois commencer par faire une boite de dialogue pour l'enregistrement du fichier.
    Si tu es sûr que tes variables sont bel et bien modifiées ca ne devrait pas te poser de problème. Celà dit, et c'est le sens de mon conseil plus haut, personnellement j'ai eu un problème similaire, sans l'interface graphique, d'enregistrement de fichier XML et on m'a conseiller XML::TWig pour ce genre de chose. Comme toi j'étais parti sur XML:: Parser, j'ai mis un temps fou à écrire mon script mais avec XML::Twig, en moins de 3h j'ai récris la totalité de mon script et j'ai pu faire l'export de Fichier XML.
    Après c'est à toi de voir.
    Voili Voilou
    FX

Discussions similaires

  1. [XML] Modifier un fichier xml à partir d'un formulaire
    Par coulane dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 21/03/2011, 23h45
  2. construire tableau a partir d'un file.Xml
    Par hermannd dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/01/2007, 15h57
  3. Extraire le 2eme élément à partir d'un file xml.
    Par rootdaoud dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 17/05/2006, 17h39
  4. Réponses: 3
    Dernier message: 03/06/2003, 13h16
  5. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45

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