Bonjour a tous,
Je suis actuellement en train de suivre le tuto:
http://djibril.developpez.com/tutoriels/perl/perl-xml/
Je voulai donc essayer de lancer l'exemple donné a savoir lire la page suivante:
(ExempleXML.xml)
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
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE annuaire SYSTEM "ExempleDTD.dtd" >
<annuaire xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExempleXSD.xsd">
<personne miseajour="2009-06-18T20:57:57">
<prenom>djibril</prenom>
<role>rédacteur</role>
<email>djibril@monmail.com</email>
<telephone>+33102030405</telephone>
<langage name="perl">
<ModulePreferes>XML::Twig</ModulePreferes>
<ModulePreferes>XML::Writer</ModulePreferes>
<ModulePreferes>Config::Std</ModulePreferes>
</langage>
<commentaire>
Personne assez active sur le forum, et
responsable d'un forum.
</commentaire>
</personne>
<personne miseajour="2009-06-14T20:57:57">
<prenom>gorgonite</prenom>
<role>rédacteur</role>
<email>gorgonite@mon.mail.com</email>
<telephone>+33112131415</telephone>
<langage name="perl">
<ModulePreferes>XML::Simple</ModulePreferes>
</langage>
<commentaire>
Personne assez active sur le forum, et
rédacteur d'articles.
</commentaire>
</personne>
<personne miseajour="2009-06-18T21:30:12">
<prenom>stoyak</prenom>
<role>rédacteur</role>
<email>stoyak@monmail.com</email>
<langage name="perl">
<ModulePreferes>XML::LibXML</ModulePreferes>
<ModulePreferes>DBI</ModulePreferes>
</langage>
<commentaire>
Personne assez active sur le forum, et
en charge de corrections d'articles.
</commentaire>
</personne>
<!-- Il n'aime rien et/ou ne connais rien -->
<personne miseajour="2009-06-20">
<prenom>jean</prenom>
<role>lecteur</role>
<email>jean@monmail.com</email>
<commentaire>
Personne assez ..., bah en faite, ne fait rien :-) .
Et oui malheureusement, ça existe.
</commentaire>
</personne>
</annuaire> |
Grace a ce code (toujours donné en exemple):
(RecupInfoFichier.pl)
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";
} |
J'ai mis les fichiers ExempleXML.xml et RecupInfoFichier.pl dans "D:\BENJAMIN\testCTRLM2"
Toutefois, en lançant la commande suivante:
D:\BENJAMIN\testCTRLM2>d:\"Appli portable\Eclipse_3.5.1\Data\ActivePerl-5.12.2.1202-MSWin32-x86-293621\perl\bin\perl.exe" RecupInfoFichier.pl
Le fichier resultat.txt est créé mais il est vide et j'obtiens sur mon invite de commande le message d'erreur suivant:
not well-formed (invalid token) at line 6, column 15, byte 291 at d:/Appli portable/Eclipse_3.5.1/Data/ActivePerl-5.12.2.1202-MSWin32-x86-293621/perl/lib/XML/Parser.pm line 187
Je suis allé voire mon fichier parser.pm et a la ligne 187 il y a:
$result = $expat->parse($arg);
Je ne trouve pas d'où pourrai venir l'erreur (car j'imagine bien que le code fonctionne chez les autres
)
Si vous avez une idée, je suis preneur 
Merci,
Cordialement,
Benjamin
Partager