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

Langage Perl Discussion :

Parser un fichier xml en perl


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Août 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Août 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Parser un fichier xml en perl
    Bonjour,

    Je debute en perl. Pour l'instant j'ai reussi à lire un fichier text et à extraire des données.
    En ce moment, j'aimerai parser un fichier xml et de recuperer certaines données.
    Mon fichier xml est de ce type :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <?xml version="1.0" encoding="UTF-8" ?> 
     <voiture> 
     <info count="-1" ended="1376903248" name="A" started="1376903248" status="OK" statusMsg="" /> 
      <info count="-1" ended="1376903275" name="B" started="1376903248" status="OK" statusMsg="" />   
    ... 
     </voiture>

    Je dois extraire par exemple pour 'name=B' :
    - la valeur de {ended} et {started} => diff = {ended} - {started}
    - le {status}

    J'ai regardé ce lien :
    http://search.cpan.org/
    ainsi que
    http://djibril.developpez.com/tutoriels/perl/perl-xml/

    Mais je suis perdue avec tous les types de module que je peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XML::LibXML
    XML::Parser
    XML::Simple
    Dans mon cas, je pense utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    use strict;
    use warnings;
    use File::Path;
    .....
    use XML::LibXML::Parser;
     
    my $OUTDIR="$home";
    my $OUTFILE="file.xml";
    my $parser;
    my $doc;
     
    $parser = new XML::Parser();
    $doc = $parser->parsefile ($OUTFILE);
     
      # load
      open my $fh, '<', 'file.xml';
      $doc = XML::LibXML->load_xml(IO => $fh);
    Là je bloque pour lui faire comprendre dans la balise voiture, l'attribut name = B, je recupere {ended},{started},{status}.

    J'ai essayé de regarder sur internet, je suis perdue avec toutes les infos.
    Si vous pouvez me donner plus d'explication ou des conseils, ça m'aiderait enormement

    Je vous remercie d'avance.

  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
    Bonjour,

    Je vous recommande d'utiliser XML::Twig (même si XML::LibXML est également un très bon module).

    Essayez de lire la documentation du module et de faire un exemple. J'essayerai de vous aider à le corriger.

  3. #3
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Salut,

    une solution simple mais efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #!/usr/bin/perl
     
    use strict;
    use 5.10.0;
    use warnings;
    use XML::Simple;
     
    my %XMLDumper=();
     
    sub XmlDumper {
    	# Dump du fichier XML et construction du hash:
    	my $ref =XMLin("XMLFile.xml");
    	%XMLDump=%{$ref};
    	return(1);	
    }
     
    # appellée comme ceci elle renvois alors une table de hash contenant les infos:
    XmlDumper();
    #affichage de la table:
    print Dumper \%XmlDumper ;

    Bonne chance et n'hésites pas a revenir en parler si des problemes surviennent.

    Cdlt.

Discussions similaires

  1. 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
  2. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  3. Parser un fichier XML
    Par Charlinecha dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/07/2005, 17h18
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

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