IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

[ XML::Simple] Problème "Not an ARRAY reference"


Sujet :

Modules Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [ XML::Simple] Problème "Not an ARRAY reference"
    Bonjour,

    Je suis actuellement en train de parser un fichier XML me remontant des informations sur des pc.
    Jusque là pas de problème grâce à Djibril et le forum mais là je bloque sur deux détails.

    Voici mon premier problème "Not an ARRAY reference" :

    Dans ce fichier XML, je récupère (par exemple) la liste des disques physiquement présent.
    Mon problème est que je peux avoir une ou plusieurs entrées dans cette section et lorsqu'il s'agit de plusieurs disques, pas de problème grâce à ce morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $ref_Disques = $data->{Machine}->{DisquesPartitions}->{Disques};
    print Dumper $ref_Disques;
    foreach my $Disque ( @{$ref_Disques->{Disque} } ) {
    	print {$FhResultat} "Nom : ".$Disque->{Nom}."\n";
    }
    mais lorsqu'il n'y en a qu'un, j'ai le message "Not an ARRAY reference".

    Je comprends pourquoi je l'ai mais je ne sais pas comment le contourner.


    Mon deuxième problème est sur un champ vide qui retourne HASH(0x2a58348) :

    Dans mon fichier XML, j'ai des champs qui peuvent ne pas être renseignés comme celui-ci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <card_Speed></card_Speed>
    Le problème est que lorsque je lis le fichier et que j'affiche le résultat dans mon fichier de sortie, j'ai "HASH(0x2a58348)" au lieu de rien.
    Lorsque je fais un Dumper, voici ce que je vois : 'card_Speed' => {},


    Pourriez-vous m'aider pour ces deux petits problèmes qui j'en suis sûr, sont super simple à résoudre ?

    Merci par avance pour votre aide.

    Mathieu.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Par défaut le parser ne crée pas d'array lorsqu'il n'y a qu'une valeur. Tu peux forcer la création d'array avec l'option ForceArray quand tu crées le parser.

    De même pour le 2e problème, il y a l'option SuppressEmpty.

    N'hésite pas à consulter search.cpan.org pour consulter la documentation des modules que tu utilises.
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Concernant le ForceArray, j'avais vu cette possibilité mais vu que je n'ai pas que des tableaux dans mon fichier et que les 3/4 des données sont de simple valeurs, cela me ferait gérer la totalité de mon fichier en tableau ce qui ne serait pas très propre je trouve.
    Je souhaiterai pouvoir tester si c'est un tableau ou une simple valeur par exemple et ainsi traiter le cas en conséquence.

    Pour le SuppressEmpty, je te remercie, je n'avais pas trouvé cette option.

    Merci en tout cas pour ta réponse.

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Chacun ses goûts ! Un traitement unifié me semble propre, mais c'est toi qui décide. Dans ce cas de figure, peut-être devrais-tu utiliser ref sur ref_Disques ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perl + XML : problème de '-' avec XML::Simple
    Par rico29600 dans le forum Modules
    Réponses: 6
    Dernier message: 17/07/2007, 14h50
  2. [XML::Simple] Problème d'accès au module Parseur
    Par Melvine dans le forum Modules
    Réponses: 6
    Dernier message: 09/10/2006, 10h40
  3. Problème XML::Simple & image::Magick
    Par rori dans le forum Modules
    Réponses: 5
    Dernier message: 17/05/2006, 17h02
  4. Problème avec XML::Simple
    Par ViRouF dans le forum Modules
    Réponses: 7
    Dernier message: 10/04/2006, 17h17
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo