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] Récupérer des données parsées


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 46
    Points : 35
    Points
    35
    Par défaut [XML] Récupérer des données parsées
    Bonjour,
    je continue dans l'apprentissage du parsage en perl et je me demande maintenant comment récupérer les données une fois parsées. J'y arrivais au début avec un fichier xml très simple. Il l'est toujours mais j'ai rajouté des informations (c'est juste un exemple!). Voici le fichier xml que je m'entraine à parser:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version='1.0'?>
    <entreprise>
        <employees>
            <employee>
                <name>John Doe</name>
                <age>43</age>
                <sex>M</sex>
                <department>Exploitation</department>
            </employee>
            <employee>
                <name>Eric Johns</name>
                <age>36</age>
                <sex>M</sex>
                <department>Sale department</department>
            </employee>
        </employees>
        <departments>
            <department>
                <name>Exploitation</name>
                <manager>John Doe</manager>
                <floor>1</floor>
            </department>
            <department>
                <name>Sale department</name>
                <manager>Eric Johns</manager>
                <floor>2</floor>
            </department>
        </departments>
    </entreprise>
    Maintenant voici ce que je fais:
    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
    /usr/local/bin/perl
     
    # utiliser le module
    use XML::Simple;
    use Data::Dumper;
    use strict;
     
    # créer un objet
    my($xml)=new XML::Simple;
     
    # lire le fichier XML
    my($data)=$xml->XMLin("./data.xml");
     
    # accéder aux données XML
    #print Dumper ($data);
     
    print (@{$data->{employees}->{employee}->[0]->{name}});
    Apparemment ce n'est pas la bonne méthode lol!

    Voici l'erreur qui m'est retournée lorsque j'essaye d'éxécuter ce code:
    Not an array reference [....] line 17
    soit la derniere ligne de mon fichier.

    J'en déduit que je n'ai pas la bonne méthode pour accéder à mes données, mais je n'arrive pas à trouver pourquoi.

    Avec un xml plus simple, en faisant (@{$data->{employee}}) je pouvais ensuite faire print $e->{name}, "\n"; pour avoir accès à mes données.

    J'ai donc essayé en rajoutant le "chemin" vers ma donnée mais ça ne marche pas.

    Est-ce que quelqu'un pourrait me donner un coup de pouce svp? Si vous avez de bons sites pour nullos ça m'intéresse aussi!

    Merci!

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 813
    Points
    4 813
    Par défaut
    Salut

    Je trouve ton fichier XML un peu zarbi, mais bon.
    je trouve que XML::Simple est sympe.... au début ! Car on en voit très vite les limites. Pour ton XML, je te recommande XPath, bien mieux en tout point.

    @++

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 813
    Points
    4 813
    Par défaut
    Resalut

    Voici un petit exemple avec XPath (vachement utile !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl -w
     
    use XML::XPath;
    use XML::XPath::XMLParser;
     
    my $xp = XML::XPath->new(filename => 'data.xml');
    my $nodeset = $xp->find('/entreprise/employees/employee/name'); # find all paragraphs
    foreach my $node ($nodeset->get_nodelist) {
    	my($string)=XML::XPath->getNodeText($node);
    	print "$string\n";
    }
    Je te laisse réfléchir là dessus, mais je te conseille de passer à XPath, ça vaut vraiment le détour !

    @++

  4. #4
    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
    tu devrais utiliser le module XML:arser:erlSAX

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 46
    Points : 35
    Points
    35
    Par défaut
    merci pour ces indications. j'en tiendrais compte. Mais pour l'instant je débute juste, j'ai pas beaucoup de temps car j'ai autres choses à faire en même temps (si les clients pouvaient se débrouiller tout seul ce serait pas drôle non? ).

    En tout cas j'ai trouvé d'où venait mon problème. Il venait de l'instruction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (@{$data->{employees}->{employee}->[0]->{name}});
    En la remplacant par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $data->{'employees'}->{'employee'}->[0]->{'nom'};
    ça marche!

    En ce qui concerne le xml bizarre, c'est juste pour m'entrainer mais les fichiers que je devrais parser auront à peu près cette tronche là en plus gros car ils recenseront des informations sur chaque poste du réseau de chaque client pour pouvoir faire du reporting.

    En tout cas merci pour ces indications.

  6. #6
    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
    je connais pas ton module mister david, sinon moi j'utilise XML:arser:erlSAX pour parser des petits et gros fichier xml (comme interpro )
    voilà, sinon j'ai reussi à parser ton fichier bartmarley mais tout depend de ce que tu peux faire??

  7. #7
    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
    ok, tant mieux si t'as reussi, oublie pas un tag resolu.
    NB: cette facon de parser ton html necessite de connaaitre parfaitement l'arbre de ton xml, l'ordre d'apparition de tes balises, ce qui peut etre lourd si ton fichier et tres gros. faut pas aussi oublier que tu seras amener à gerer des attributs
    courage!!!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 46
    Points : 35
    Points
    35
    Par défaut
    merci pour ton soutien

    Je connais parfaitement l'architecture de mon fichier puisque c'est moi qui l'ai conçu. Et je peux même dire que l'architecture est très répétitive.

    Désolé pour le tag résolu, c'est un pitit oubli de ma part.

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

Discussions similaires

  1. [Dojo] Grid : Charger des données sans passer par un fichier
    Par Johor dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 28/12/2009, 19h34
  2. Réponses: 6
    Dernier message: 29/04/2009, 13h22
  3. Insertion des données sur excel par sql
    Par wagui26 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 15/04/2008, 10h21
  4. [XML] Probleme lors de l'insertion des données XML
    Par Lyna2007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/03/2007, 16h26
  5. Parsing XML gestion DB I/O sur des données de type CLOB
    Par stchitembo dans le forum Oracle
    Réponses: 5
    Dernier message: 22/03/2006, 11h14

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