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: Types différents renvoyés


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut Xml: Types différents renvoyés
    Bonjour

    Je suis sûr que je ne suis pas le 1er à tomber sur ce cas, mais comme je ne suis pas un pro, je prefere demander directement à ceux qui savent...
    Voici mon souci.

    J'ai le code XML suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Historic>
      <Done>
        <Build>    
          <Machine>
            <Name>MTP-QA19</Name>        
          </Machine>
          <Machine>
            <Name>MTP-QA20</Name>
          </Machine> 
        </Build>
      </Done>
    </Historic>
    Je veux récupérer toutes les valeurs "Name". Voici donc mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    my $xml = new XML::Simple;  
    my $data = $xml->XMLin("test.xml");
     
    my $machine = $data->{Done}->{Build}->{Machine};
     
    foreach my $m(@{$machine})
    {
      print $m->{Name}."\n";
    }
    Ce code fonctionne... mais seulement s'il y'a au moins 2 noeuds <Machine> dans mon xml.
    S'il n'y en a qu'un, j'ai l'erreur "logique" suivante:
    Not an ARRAY reference at test.pl line 8.

    (line 8 = foreach)

    Quel code selon vous fonctionnerait dans tous les cas ?

    Merci d'avance pour votre aide !
    K.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    XML::Simple est vraiment un module à ne plus utiliser. Je te conseil de lire cet article.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Ok merci de ta réponse, je vais lire ton tuto

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Apres une lecture (rapide), je me rends compte donc qu'il n'y a pas de solution à part tester le type de retour... Ce qui semble logique finalement, bien que pas pratique.
    Je vais continuer à utiliser Xml::Simple tout de meme car mes fichiers xml sont vraiment tres courts et relativement simples.

    Merci pour ton aide en tout cas!!
    K.

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    my $xml = new XML::Simple;  
    my $data = $xml->XMLin("test.xml");
     
    my $machine = $data->{Done}->{Build}->{Machine};
     
    if ( ref($machine) eq 'ARRAY' ) {
      foreach my $m(@{$machine})
      {
        print $m->{Name}."\n";
      }
    }
    else {
      print "$machine\n";
    }

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

Discussions similaires

  1. Créer une fonction pouvant renvoyer 2 types différents
    Par Simara1170 dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2014, 14h42
  2. [JTable] Colonnes de types différents
    Par gondek dans le forum Composants
    Réponses: 3
    Dernier message: 20/10/2005, 00h07
  3. Tableau d'objets de type différents
    Par Hell dans le forum C++
    Réponses: 9
    Dernier message: 11/01/2005, 22h57
  4. [Sérialisation] d'objets de types différents
    Par Amnesiak dans le forum Général Java
    Réponses: 3
    Dernier message: 08/12/2004, 22h28
  5. Réponses: 2
    Dernier message: 07/10/2004, 17h00

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