Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1416 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1131882
dams78
développateur
Posté le 29-04-2009 à 21:23:44  profilanswer
 

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
mood
Publicité
Posté le 29-04-2009 à 21:23:44  profilanswer
 

n°1131894
sputnick
bip...bip...bip...bip...bi...b
Posté le 29-04-2009 à 22:22:06  profilanswer
 

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  ;)

n°1131914
dams78
développateur
Posté le 29-04-2009 à 23:15:34  profilanswer
 

à 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
n°1131919
sputnick
bip...bip...bip...bip...bi...b
Posté le 29-04-2009 à 23:46:56  profilanswer
 

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";'

n°1131962
dams78
développateur
Posté le 30-04-2009 à 08:39:28  profilanswer
 

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
n°1132171
sputnick
bip...bip...bip...bip...bi...b
Posté le 30-04-2009 à 21:08:45  profilanswer
 

à "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";'

n°1132263
dams78
développateur
Posté le 01-05-2009 à 12:39:44  profilanswer
 

bien joué, ça marche niquel
encore merci


---------------
dam's (debianer), ma galerie Flickr
n°1132815
dams78
développateur
Posté le 04-05-2009 à 10:40:22  profilanswer
 

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
n°1132960
sputnick
bip...bip...bip...bip...bi...b
Posté le 04-05-2009 à 22:31:07  profilanswer
 

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
n°1133012
dams78
développateur
Posté le 05-05-2009 à 09:52:36  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
Commande pour copie de fichier en boucle sous linuxcondition avec un fichier en input (awk)
[bash] Remplacer un path dans un fichier par autre choseremplacer rapidement des mots d'un fichier par ceux d'un autre fichier
[AIDE][Centos] Installer nmap-cgi (pb de lib perl)VirtualBox : Partage fichier Host-Guest
[PERL] Pourcentage avancementLongueur maximale d'une chaine dans un fichier texte
Fichier ou dossier ?Récupérer des infos d'un fichier html pour les mettre dans un fichier
Plus de sujets relatifs à : extraire des infos d'une fichier xml (en perl)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR