extraire des infos d'une fichier xml (en perl)

extraire des infos d'une fichier xml (en perl) - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-04-2009 à 21:23:44    

Bonsoir,
Pour ceux qui connaissent j'utilise le logiciel grisbi pour faire mes comptes.
Je voudrai extraire du fichier xml généré par grisbi les soldes de mes comptes et ceci en ligne de commande.
 
le fichier xml se présente comme ceci :
<Comptes>
 <Compte>
  ...
  <Solde_courant>99999999<Solde_courant>
  ...
 </Compte>
 ...
</Comptes>
 
J'ai trouvé comme utilitaire xmllint, mais j'ai pas l'impression qu'il réponde à mes besoins.
Si vous avez une petite idée de comment je pourai m'en sortir
Merci


Message édité par dams78 le 04-05-2009 à 11:37:44

---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 29-04-2009 à 21:23:44   

Reply

Marsh Posté le 29-04-2009 à 22:22:06    

Le shell est pas le meilleur moyen d'extraire des infos d'un fichier XML.
Perl est bien plus adapté, et c'est plutot simple ( XML::Simple même  :D  ) si tu t'inspire de cet exemple qu'il suffit de copier coller dans un (pseudo)terminal :
 

Code :
  1. cat > /tmp/l.xml <<WTF
  2. <?xml version="1.0" ?>
  3. <!DOCTYPE Foobar>
  4. <Foobar Version="1.0">
  5.     <Comptes>
  6.         <Compte>
  7.             <Solde_courant>99999999</Solde_courant>
  8.         </Compte>
  9.     </Comptes>
  10. </Foobar>
  11. WTF
  12. perl -MXML::Simple -e '$c = XMLin("/tmp/l.xml" ); print $c->{Comptes}->{Compte}->{Solde_courant}, "\n";'


 
Si tu connais pas perl, il te suffit d'installer ce module si besoin avec la commande :

Code :
  1. # cpan -i XML::Simple


 

Code :
  1. perldoc XML::Simple

peux servir aussi ^^
 
Bon, en fait j'ai menti, on est resté en shell ^^ juste on a pas appelé un tools exotique, mais une valeure sure  ;)

Reply

Marsh Posté le 29-04-2009 à 23:15:34    

à chaque fois je pense pas à perl...
alors mon fichier xml se présente sous cette forme :
<?xml version="1.0"?>
<Grisbi>
du coup je n'ai pas :
<?xml version="1.0" ?>
<!DOCTYPE Foobar>
<Foobar Version="1.0">
 
comme dans ton exemple, et en effet si je le rajoute pas cela ne fonctionne pas... c'est un peu embêtant mais bon
l'autre problème est que si j'ai plusieurs compte j'ai cette erreur : Not a HASH reference at -e line 1.
je pense qu'il faut gérer ça directement dans perl...
 
si t'as une solution surtout pour le premier problème je suis preneur ;)
 
merci


---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 29-04-2009 à 23:46:56    

Dit donc, toi t'a pas envie de chercher :)
 

Code :
  1. cat > /tmp/l.xml <<RTFM
  2. <?xml version="1.0" ?>
  3. <Grisbi>
  4.     <Comptes>
  5.         <Compte>
  6.             <Solde_courant>3,50$</Solde_courant>
  7.         </Compte>
  8.     </Comptes>
  9. </Grisbi>
  10. RTFM
  11. perl -MXML::Simple -e '$c = XMLin("/tmp/l.xml" ); print $c->{Comptes}->{Compte}->{Solde_courant} ."\n";'

Reply

Marsh Posté le 30-04-2009 à 08:39:28    

merci ça marche, il me reste plus qu'à traîter l'erreur Not a HASH reference at -e line 1. mais ça c'est dut au faite qu'il y a plusieurs comptes, je suppose donc qu'une boucle est nécessaire, je vais creuser par là
merci de ton aide ;)

 

--
alors en fait j'ai l'impression que le fichier xml est disons construit bizarrement...
voila la structure des comptes :
<compte>
 <details>
   <No_de_compte>0</No_de_compte>
   <Solde_courant>1111</Solde_courant>
 </detail>
<compte>
<compte>
...

 

donc en fait l'identifiant n'est pas dans la balise compte comme ça devrai l'être (il me semble), du compte se sait pas trop comment différencier et même afficher tous les soldes


Message édité par dams78 le 30-04-2009 à 08:55:43

---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 30-04-2009 à 21:08:45    

à "brut pourpoint" comme ça, je te dirais d'essayer :

Code :
  1. perl -MXML::Simple -e '$c = XMLin("/tmp/l.xml" ); print $c->{Comptes}->{Compte}->[1]->{Solde_courant} ."\n";'

Reply

Marsh Posté le 01-05-2009 à 12:39:44    

bien joué, ça marche niquel
encore merci


---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 04-05-2009 à 10:40:22    

bonjour,
j'essaye maintenant, en perl, de n'afficher que 2 décimales à mon solde
je fais donc comme ceci :  
printf ( "%.2f", $solde);
cela affiche bien deux décimales seulement elles sont toujours 00, même si mon solde est de 999,99, j'obtiens 999,00


---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 04-05-2009 à 22:31:07    

Code :
  1. perl -e 'printf("%d", 6.10);'


6
 

Code :
  1. perldoc -f sprintf


Message édité par sputnick le 04-05-2009 à 22:39:13
Reply

Marsh Posté le 05-05-2009 à 09:52:36    

en fait j'ai trouvé ça :  
$maVariable =~ s/(,\d{2})\d*/$1/;


---------------
dam's (debianer), ma galerie Flickr
Reply

Sujets relatifs:

Leave a Replay

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