Récupération de données XML dans des tableaux

Récupération de données XML dans des tableaux - Perl - Programmation

Marsh Posté le 23-11-2010 à 21:10:01    

Bonjour,
 
je me permet de vous contacter car je suis amené à développer un script Perl (je n'ai jamais programmé en Perl et je dois avouer que je suis un peu dérouté par ce langage).
 
Après avoir ouvert un fichier XML, il devra le parcourir et stocker des données dans 3 tableaux différents. Pourriez-vous m'aider à réaliser ces deux actions.
 
Voici le format du XML (il y a un nombre variant et inconnu à l'avance de voitures):
 


<Voitures>
   <Voiture>
       <Id></Id>
       <Prix></Prix>
       <Peinture>
            <Couleur></Couleur>
            <Mat></Mat>
       </Peinture>
   </Voiture>
...
   <Voiture>
       <Id></Id>
       <Prix></Prix>
       <Peinture>
            <Couleur></Couleur>
            <Mat></Mat>
       </Peinture>
   </Voiture>
<Voitures>


Voila je voudrais que pour chaque voiture on récupère dans 3 tableaux l'Id, le Prix et la Couleur
 
Ainsi le premier tableau serait : Id Voiture1   Id Voiture 2   Id Voiture 3......
le deuxième : Prix voiture 1    Prix voiture 2 ....
troisième : Couleur Voiture 1   ...
 
Si quelqu'un pouvait m'aider ce serai vraiment cool.
 
Merci,
 
Lalalallal


Message édité par lalalallal le 23-11-2010 à 21:40:30
Reply

Marsh Posté le 23-11-2010 à 21:10:01   

Reply

Marsh Posté le 24-11-2010 à 10:32:21    

Citation :

Si quelqu'un pouvait m'aider ce serai vraiment cool.

Ici, on aide, on ne fait pas le boulot à votre place, donc montrez ce que vous avez fait et on vous dira ce qui ne va pas, surtout que c'est facile à faire, ça.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-11-2010 à 20:50:23    

Bonsoir,
 
désolé pour le temps de réponse mais j'ai eu un petit imprévu hier qui m'a empêché de venir ici ^^
 
Voici ce que j'ai fait :


$nom_fichier_courant = $chemin_rec_fic.fct_format_nom_nom_fichier($date,'voiture.xml');
if(open(INPUT,$nom_fichier_courant))
{
while(<INPUT> )
{
chomp;
if(/\<Id\>/)
{
push(@tab_id, ??????)
}
if(/\<Id\\\>/)
{
push(@tab_id,"" )
}
 
...
 
}
}
close(INPUT);
push(@liste_fichiers_a_archiver, $nom_fichier_courant);
}


 
je n'arrive pas a récupérer ce qui suit ( $' ) sans la fin de la borne...
de plus je ne suis pas sur pour le "   /\<Id\>/   " et "   /\<Id\\\>/  "
 
Merci beaucoup,
 
Lalalallal
 
ps : ah oui comment est-ce que l'on fait pour créer une fonction qui prends en argument 3tableaux ?

Reply

Marsh Posté le 25-11-2010 à 22:53:56    

Bon, un truc vite fait et loin d'être optimal:

Code :
  1. #!/usr/local/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my (@tab1, @tab2, @tab3);
  6. my $filename = "..."; # a vous de faire ce qu'il faut ici.
  7. open (my $file, "<", $filename) or die $!;
  8. while (<$file> ) {
  9.    if (/\<Id\>([^<]*)\<\/Id\>/o) {push @tab1, $1;}
  10.    if (/\<Prix\>([^<]*)\<\/Prix\>/o){push @tab2, $1;}
  11.    if (/\<Couleur\>([^<]*)\<\/Couleur\>/o){push @tab3, $1;}
  12. }
  13. close $file;


Si vos champs sont sur plus d'une ligne, ce code ne fonctionnera pas (et il faudra employer un module avec un vrai parser xml), mais je na sais pas comment sont vos données
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-11-2010 à 23:20:12    

Bonsoir,
 
Merci beaucoup, le fichier xml est sur plusieurs lignes, on l'a généré comme ca pour pouvoir le modifier rapidement a la main avec le bloc note... (il a la meme tete que ce que j'ai donné ou qu l'on obtiendrai en l'ouvrant avec ie)
 
Encore merci pour ton aide
 
Lalalallal

Reply

Marsh Posté le 26-11-2010 à 01:35:49    

Pour optimiser un peu, si tu n'as pas deux champ sur la même ligne dans tes données, tu peux remplacer
{push @tab1, $1;}
par  
{push @tab1, $1; next;}
Et pareil pour les deux autres lignes.
Ça évite de passer dans des tests inutiles.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed