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 :

Extraire le contenu des balises XML


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut Extraire le contenu des balises XML
    Bonjour,

    J'ai deux documents XML à comparer :

    Ils sont tous les deux de la même taille, ont les mêmes données mais enregistrés à des heures différentes. Ils permettent de voir si un véhicule a bougé. Ils sont du type :
    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
     
    <voitures>
     <voiture id="1">
       <nom> mazda </nom>
       <latitude>00.00000</latitude>
       <longitude>0.00000</longitude>
     </voiture>
     <voiture id="2">
      <nom> peugeot </nom>
      <latitude>11.11111</latitude>
      <longitude>0.00000</longitude>
     </voiture>
    .
    .
    .
    </voitures>
    Je dois comparer les deux documents et extraire la latitude et la longitude si le véhicule X a bougé.

    Donc mon problème c'est que je ne sais pas comment on extrait le contenu des balises en Perl. Je voudrais dire, si dans le doc 1 et le doc 2 la voiture ayant pour id = 1 latitude et longitude sont différents alors on extrait les données....

    Voilà je ne vois pas trop comment faire...J'ai essayé avec le module XML::Simple mais ça ne fonctionne pas...

    Merci de votre aide par avance !

    Cali

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par calimero2611
    Voilà je ne vois pas trop comment faire...J'ai essayé avec le module XML::Simple mais ça ne fonctionne pas...
    Si !!

    Cela fonctionne certainement, mais probablement pas de la manière à laquelle tu t'attends

    Montre-nous le code utilisant XML::Simple, réduit à la seule partie "utile" au problème ...

    En outre, si tu ne perçois pas bien les données telles que XML::Simple les manipule, tu peux utiliser le module Data::Dumper pour faire un peu d'introspection dans les structures de hachages générées et comprendre ce qui se passe.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Merci de me répondre !

    Alors en fait j'ai utilisé Data::Dumper et en effet les données ne sont plus organisées comme dans le doc XML source ! Du coup je suis un peu perdue !

    Pour le code XML::Simple j'ai tout bêtement fait un print à la fin avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "La voiture $data->{nom} se situe à un point de Lat : $data->{latitude} et à un point de Long : $data{longitude}";
    Mais ça ne va pas et en plus il faut que je puisse dire si dans le doc 1 et dans le doc 2 la long et la lat d'une même voiture sont différentes alors on extrait....

    C'est surtout la formulation des instructions qui me bloque !

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par calimero2611
    Alors en fait j'ai utilisé Data::Dumper et en effet les données ne sont plus organisées comme dans le doc XML source ! Du coup je suis un peu perdue !
    La structure est quand même plus ou moins la même : c'est une structure arborescente, comme dans le fichier XML. Seul l'ordre des éléments de même niveau peut varier, du fait que XML::Simple utilise des hachages dont l'ordre est imprévisible.

    Citation Envoyé par calimero2611
    Pour le code XML::Simple j'ai tout bêtement fait un print à la fin avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "La voiture $data->{nom} se situe à un point de Lat : $data->{latitude} et à un point de Long : $data{longitude}";
    Mais ça ne va pas et en plus il faut que je puisse dire si dans le doc 1 et dans le doc 2 la long et la lat d'une même voiture sont différentes alors on extrait....
    La structure de ton XML est arborescente !!! Il faut donc sélectionner selon l'ID avant d'aller trouver le nom et la position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $data->{voiture}->{1}->{nom}."\n";
    Ainsi, en chargeant tes deux fichiers XML dans deux objets différents, tu peux aller introspecter leurs valeurs et les comparer.


    Citation Envoyé par calimero2611
    C'est surtout la formulation des instructions qui me bloque !
    Donc, tu voudrais qu'on te l'écrive ?

    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par 2Eurocents
    La structure de ton XML est arborescente !!! Il faut donc sélectionner selon l'ID avant d'aller trouver le nom et la position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $data->{voiture}->{1}->{nom}."\n";
    Ainsi, en chargeant tes deux fichiers XML dans deux objets différents, tu peux aller introspecter leurs valeurs et les comparer.
    Mais oui bien sûr !!!! Merci mille fois !!! je vais essayer tout de suite !


    Citation Envoyé par Calimero2611
    C'est surtout la formulation des instructions qui me bloque !
    Donc, tu voudrais qu'on te l'écrive ?
    Pas du tout !!!! Je ne veux pas qu'on me mâche le travail ! Je dis juste ce qui me pose problème !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    ça y est j'ai réussi !


    Par contre existe-t-il une méthode plus simple que de parcours tout l'arbre pour arriver au noeud voulu ?

    En fait je me retrouve avec une ligne énorme lorsque je veux afficher le contenu de la balise <f> qui est le noeud-fils de <e> qui est le noeud-fils de <f> et ainsi de suite jusqu'à a. Le code ressemble à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$data->{a}->{b}->{c}->{d}->{e}->{f}";
    Existerait-il un autre module que XML::Simple pour parcourir les noeuds plus simplement ?

    Cali

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par calimero2611
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$data->{a}->{b}->{c}->{d}->{e}->{f}";
    Note déjà que ta ligne pourrait se réécrire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$data->{a}{b}{c}{d}{e}{f}";
    (seul la première flèche est indispensable)

    Sinon, pour une syntaxe plus élégante et plus puissante d'accès au noeuds XML, il faut regarder du côté de XPath avec par exemple le module XML::XPath.

    --
    Jedaï

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Parfait ! Merci Jedai déjà c'est moins lourd !

    Maintenant il faut que je le fasse pour mes deux fichiers et les comparer entre eux pour créer un nouveau fichier! !

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

Discussions similaires

  1. [XSLT] lire le contenu des balises en xml dans un ordre précis
    Par ajax12 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/04/2010, 18h47
  2. XML contenu des balises pour des images
    Par boitalette dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2009, 18h36
  3. Tester le contenu textuel des balises XML?
    Par Marian83 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2009, 12h34
  4. [XML] [SAX] Extraire le nom des balises dans XML
    Par Fusio dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/06/2007, 23h19
  5. [PHP-JS] Extraire le contenu des balises title
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2006, 15h23

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