use locale; use strict; use XML::Parser; if ( $#ARGV!=0 ){ die "Usage : ", $0, "fichier_xml\n"; } my $parseur = new XML::Parser; $parseur -> setHandlers ( Start => \&balise_ouvrante, End => \&balise_fermante, Char => \&segment_texte ); my ( $segment, $segment_en_cours, $locuteur ); $parseur->parsefile( $ARGV[0] ); sub balise_ouvrante { my $p = shift @_; my $balise = shift @_; my %attributs; while ( $#_ >= 0 ){ my $cle = shift @_; my $valeur = shift @_; $attributs{$cle} = $valeur; } if ( $balise eq "verbal_action" ){ $locuteur = $attributs{"who"}; } elsif ( $balise eq "seg" ){ $segment = ""; $segment_en_cours = 1; } } sub segment_texte { my $p = shift @_; my $texte = shift @_; if ( $segment_en_cours ) { $segment = $segment . $texte; } } sub balise_fermante { my $p = shift @_; my $balise = shift @_; if ( $balise eq "seg" ){ $segment =~ s/\n//g; $segment =~ s/\s\s+/ /g; print $locuteur, " : ", $segment,"\n"; $segment_en_cours = 0; } }