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
| #! /usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $parser = XML::Simple->new( KeepRoot => 1 );
# Creation du fichier resultat
my $FichierResulat = 'resultat.txt';
open( my $FhResultat, '>', $FichierResulat )
or die("Impossible d'ouvrir le fichier $FichierResulat\n$!");
my $doc = $parser->XMLin('ExempleXML.xml');
# Tout le fichier XML est dans $doc sous forme d'arbre
foreach my $personne ( @{ $doc->{annuaire}->{personne} } ) {
print {$FhResultat} 'Personne : ';
print {$FhResultat} $personne->{prenom};
print {$FhResultat} "\t";
print {$FhResultat} $personne->{miseajour};
print {$FhResultat} "\nRole : ";
print {$FhResultat} $personne->{'role'};
print {$FhResultat} "\nEmail : ";
print {$FhResultat} $personne->{email};
print {$FhResultat} "\nTelephone : ";
print {$FhResultat} str_if( $personne->{'telephone'}, '' );
if ( $personne->{langage} ) {
print {$FhResultat} "\nlangage preferes : ";
langage_process( $personne->{langage} );
}
print {$FhResultat} "\nCommentaire : ";
print {$FhResultat} $personne->{commentaire};
print {$FhResultat} "\n", "=" x 10, "\n\n";
}
# Fermeture du fichier
close($FhResultat);
#==============
# Procédures
#==============
sub is_array {
my ($var) = @_;
return ( ref($var) eq 'ARRAY' );
}
sub str_if {
my ( $str, $default ) = @_;
return $default unless $str;
return $str;
}
sub langage_process {
my ($langage) = @_;
print {$FhResultat} str_if( $langage->{name}, '' );
return unless $langage->{ModulePreferes};
if ( is_array( $langage->{ModulePreferes} ) ) {
foreach my $module ( @{ $langage->{ModulePreferes} } ) {
module_process($module);
}
}
else {
module_process( $langage->{ModulePreferes} );
}
}
sub module_process {
my ($module) = @_;
print {$FhResultat} "\n\t- $module";
} |