Boucle sur un fichier XML (SAX) [Résolu/Fermé]

Signaler
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
-
Messages postés
5528
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 mai 2021
-
Bonjour,

J'ai un léger soucis ^^.

Je suis en train de reprendre un script développer par quelqu'un d'autre et j'ai un très gros soucis a comprendre les tests qui sont fait dans la boucle IF.

Pourriez vous m'aidez svp

Voici le code:

my $xmlfile = XMLin($xml_file ) or logAndDie "[ERROR] Can not read XML file $xml_file !\n";
if ( ref($xmlfile->{LIST_BURST}->{BURST}) ne 'ARRAY' )
{
my $Addr = $xmlfile->{LIST_BURST}->{BURST};

&all_burst($Addr);

}
else
{
foreach my $Addr ( @{ $xmlfile->{LIST_BURST}->{BURST} } )
{

&all_burst($Addr);

}
}


Je ne comprend pas ce que vérifie le IF et le else


Merci d'avance de votre aide

1 réponse

Messages postés
5528
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 mai 2021
933
Salut lefreeman63,

Le
if
utilise la fonction Perl
ref
pour tester si
$xmlfile->{LIST_BURST}->{BURST}
est une référence vers un tableau.

https://perldoc.perl.org/functions/ref

Si ce n'est pas une référence vers un tableau, la valeur de
$xmlfile->{LIST_BURST}->{BURST}
est rangée dans
$Addr
, puis traitée par une fonction all_burst définie dans ton programme.

Si c'est une référence vers un tableau, le tableau est parcouru dans le else, et les valeurs successives sont mises par le foreach dans
$Addr
, puis traitée par une fonction all_burst définie dans ton programme.


Dal
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
5528
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 mai 2021
933
ok, et que contient $xml_file (avant appel à XMLin) lorsque cela se produit ?
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016

tu veux dire lors du test :

if ( -e $xml_file )

il contient le nom du fichier XML qui contient les données.



Je viens de faire un test en activant le DUMPER avant l'appel de la fonction $all_burst


if ( -e $xml_file )
{
print LOG "[INFO] ".localtime(time)." Opening the XML file in read mode\n";
my $xmlfile = XMLin($xml_file ) or logAndDie "[ERROR] Can not read XML file $xml_file !\n";
print Dumper($xmlfile);

Et cela me retourne bien mon fichier XML avec les données découpés:


$VAR1 = {
'LIST_OSAF_FIRST_QUERY' => {
'OSAF_FIRST_QUERY' => {
'AF_SRWINIT' => {},
'LIST_BURST' => {
'BURST' => {
'FAX_NO' => {},
'FILE_DESCRIPTION' => ' 2328118',
'CP_TEMPLATE_CODE' =>XML.en.00/?getSource=true',
'FILE_NAME' => '/XXBMT_FNDSCURS-MULTI-2328118.pdf',


Donc sa semble bien charger dans ma variable le fichier XML



Donc pouquoi quand sa lance la fonction $all_burst apres sa me retourne:

$VAR1 = undef;


Merci encore de ton aide
Messages postés
5528
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 mai 2021
933
Si c'est bien le contenu de $xmlfile qui est dumpé (c'est à dire ce que retourne XMLin), la réponse est simple.

$xmlfile->{LIST_BURST}->{BURST};
est indéfini dans ce que tu postes.

C'est
$xmlfile->{LIST_OSAF_FIRST_QUERY}->{OSAF_FIRST_QUERY}->{LIST_BURST}->{BURST};
qui l'est.

Dal
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016

bien vu l'aveugle ^^

J'ai supprimer les 2 lignes LIST_OSAF_FIRST_QUERY et OSAF_FIRST_QUERY dans le fichier XML et ce coup la sa marche mieux :-)

Du coup sa m'oblige a ce que mes premiere lignes du fichier XML soit tjs les même.... :-/

Sa m'arrange moins sa par contre lol


En tous cas merci beaucoup de ton aide et surtout de tes grande connaissances :-)
Messages postés
5528
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 mai 2021
933
De rien, content d'avoir pu t'aider.

Je ne suis pas un spécialiste Perl, mais je le pratique depuis un moment :-)

Bon courage pour la suite !