Boucle sur un fichier XML (SAX)
Résolu
lefreeman63
Messages postés
136
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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:
Je ne comprend pas ce que vérifie le IF et le else
Merci d'avance de votre aide
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
A voir également:
- Boucle sur un fichier XML (SAX)
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
1 réponse
Salut lefreeman63,
Le
https://perldoc.perl.org/functions/ref
Si ce n'est pas une référence vers un tableau, la valeur de
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
Dal
Le
ifutilise la fonction Perl
refpour 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
Cela m'aide bien.
J'aurais une autre question du coup, et j'espère être assez clair.
Mais à quoi je vais voir que mon fichier XML va être une référence ou non à un tableau?
Merci d'avance pour ta réponse.
Vois https://metacpan.org/pod/release/GRANTM/XML-Simple-2.20/lib/XML/Simple.pm
pour comprendre son fonctionnement.
Par définition, va retourner une référence à une structure de données dans $xmlfile.
Ton code vérifie si dans cette structure de données BURST contenue dans LIST_BURST, contient une référence vers un tableau.
Si c'est le cas, c'est probablement parce que ton fichier XML contient quelque chose comme :
Si ce n'est pas une référence à un tableau, c'est certainement parce qu'il n'y a qu'une seule entrée "BURST" sous "LIST_BURST" dans ton fichier XML.
Dal
Merci beaucoup et bonne continuation à toi
Effectivement dans mon fichier de test je n'ai qu'une seul balise <BURST> c'est pour cela que je passe dans la boucle IF et que mon fichier est rangée dans $Adrr.
Cependant, quand je lance la fonction $all_burst cette ligne la ne fonctionne pas :
$F->{FILE_NAME} ne me ramène aucune information.
Alors que cela fonctionne si il y a plusieur balise <BURST> et je passe dans le
Sa me dépasse un peu beaucoup :-/
Toutes mes lignes de commande $F-> ..........
Ne récupère pas les informations dont j'ai besoin.
Désolé de encore te demander de l'aide :-)
Tu pourrais utiliser le module Data::Dumper pour inspecter le contenu de ce qui est passé à ta fonction dans un cas et dans l'autre et voir ce qui diffère et pourquoi.
Dal