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
| ###parse le fichier xml selon l'ÈlÈment a analyser
##on recupere ici LOCATION, ORGANISATION ET PERSON DANS LE FICHIER SORTIE DE GATE
use locale;
use strict;
use XML::Parser;
my $filename = 'out1.xml';
open OUT, '>:utf8', $filename
or die "Couldn't open $filename : $!\n";
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);
$parseur->parsefile( $ARGV[0] ,'<:utf8');
sub balise_ouvrante {
my $p = shift @_;
my $balise = shift @_;
my %attributs;
if ( $balise eq "Organization" | $balise eq "Location" | $balise eq "Person"){
$segment = "";
$segment_en_cours = 1;
print OUT "<".$balise." ";
while ( $#_ >= 0 ){
my $cle = shift @_;
my $valeur = shift @_;
$attributs{$cle} = $valeur;
if($cle eq "locType" | $cle eq "orgType" | $cle eq "gender"){
print OUT $cle.'="'.$valeur.'" ';
}
}
print OUT ">";
}
}
sub segment_texte {
my $p = shift @_;
my $texte = shift @_;
if ( $segment_en_cours ) {
$segment = $segment . $texte;
}
}
my $i;
sub balise_fermante {
my $p = shift @_;
my $balise = shift @_;
if ( $balise eq "Organization" | $balise eq "Location" | $balise eq "Person"){
$segment =~ s/\n//g;
$segment =~ s/\s\s+/ /g;
print OUT $segment."</".$balise.">"."\n";
#print OUT "<".$balise.">".$segment."</".$balise.">"."\n";
#print OUT $balise."#".$segment."\n";
$segment_en_cours = 0;
$i++;
}
}
##print "---Nombre de signature--- :".$i."\n"; |
Partager