taille du tableau avec XML:Simple et option du module

taille du tableau avec XML:Simple et option du module - Perl - Programmation

Marsh Posté le 11-10-2006 à 11:23:13    

salut,
 
J'utilise le module XML::Simple et j'obtiens se resultat

Citation :

$VAR1 = {
          'table' => [
                     {
                       'nom' => 'pilote',
                       'champs' => {
                                   'prenom' => 'jina',
                                   'nom' => 'john',
                                   'intitule' => 'numpilote'
                                 }
                     },
                     {
                       'nom' => 'vol',
                       'champs' => {
                                   'intitule' => 'xx32',
                                   'ville' => 'paris'
                                 }
                     }
                   ]
        };


 
à partir de ce fichier xml

Citation :

<?xml version="1.0" encoding="windows-1250"?>
<base>
<table nom="pilote">  
 <champs intitule="numpilote" nom="john" prenom="jina">  
</champs>    
 </table>  
<table nom="vol">  
 <champs intitule="xx32" ville="paris">  
   
  </champs>
 </table>  
</base


 
j'aurai voulu faire une boucle pour obtenir le nom de chaque table mais comment faire pour avoir la taille du tableau  ??
 
je ne comprends pas lorsque j'essai d'utiliser les options du module (option qui figure sur cpan) ,que je lance mon script l'options n'est jamais reconnu
 
Par exemple j'utilise cette option

Code :
  1. $data = $xml->XMLin("./fg.xml",KeyAttr => "login" );


 
et quand je lance le script, j'ai cela

Citation :

Unrecognised option: KeyAttr at C:\Documents and Settings\v\Bureau\v\pars.pl line 11


 
et c'est pareil pour les autres option  :??:  
 
 
 
 
Merci


Message édité par donny3 le 11-10-2006 à 11:43:01
Reply

Marsh Posté le 11-10-2006 à 11:23:13   

Reply

Marsh Posté le 11-10-2006 à 14:03:15    

pour obtenir le nombre, j'ai essayer avec une boucle while

Code :
  1. while($a){
  2. print "i vaut >>>>>>><".$i."<<<<<<<<<<<<<";
  3. $i++;
  4. }


mais ma boucle tourne à l 'infini

Reply

Marsh Posté le 11-10-2006 à 15:12:26    

pour les options est ce que cela peut venir de la version de mon module
j'ai fait cela et apparament il est à jour

Citation :


ppm> upgrade XML-Simple
XML-Simple 1.06: up to date.

Reply

Marsh Posté le 11-10-2006 à 15:55:29    

Tu as trois problèmes à gérer : les références, la gestion des types de base PERL (hâchages, tableaux, scalaires, ...), et l'imbrication de tout ça.
 
Tout d'abord, de la documentation :
Types de base : http://perldoc.perl.org/perldata.html
Références : http://perldoc.perl.org/perlref.html
 
Je vais ensuite expliquer pour ton cas précis, mais tu devrais lire ces deux pages, en entier, et souvent t'y référer. J'y ai moi aussi recours, souvent, parce que ce n'est parfois pas intuitif.
 
Quoiqu'il en soit, ta variable $VAR1 est une référence de hâchage de tableau de hâchages.
Si, si.
 
Tout d'abord, pour accéder à quoique ce soit dans tes références, tu vas devoir déréférencer en indiquant le type.
 
Par exemple, pour accéder à la liste des clefs de hâchage contenus dans $VAR1 :

print "$_\n" foreach keys %{ $VAR1 };


Ici, par l'utilisation de la syntaxe "%{ }", j'ai indiqué à l'interpréteur PERL que $VAR1 était une référence de hâchage.
J'ai obtenu "table" en réponse, parce que c'est la seule clef contenue dans ce hâchage.
 
 
Ensuite, pour connaître le nombre d'éléments contenus dans le tableau pointé par la clef de hâchage "table" :

print "Nombre d'éléments de la section 'table' : ", scalar(@{ $VAR1->{table} }), "\n";


Là, j'ai accédé au contenu de ma clef de hâchage en déréférençant $VAR1 vers la clef "table".
 
J'ai ensuite déréférencé mon résultat, avec @{}, pour indiquer qu'il s'agit d'une référence de tableau.
Et, puisque tu as lu le premier lien que j'ai posté, tu sais qu'un tableau en contexte scalaire retourne le nombre d'éléments qu'il contient, j'ai donc forcé le contexte avec scalar().
 
Enfin, pour exemple, je vais imprimer la liste des clefs de hâchage contenu en première position du tableau obtenu :

print "Clefs du premier élément du tableau : \n";
print "$_\n" foreach keys %{ @{ $VAR1->{table} }[0] };


 
 
Voila, en très rapide, ce que ça donne.
Mais comme tu peux le voir, il vaut mieux maîtriser les principes de base du langage avant de se lancer dans ce genre de gymnastique. Je ne saurais donc trop te conseiller de zoner à fond le site http://perldoc.perl.org , et d'y revenir souvent y chercher la documentation nécessaire.

Reply

Marsh Posté le 11-10-2006 à 16:09:49    

A propos des références [edit]et des nested structures d'ailleurs[/edit] si un jour tu tombes sur le livre advanced perl programming, tout à la fin tu as un excellent chapitre "Syntax summary" qui résume tout ça de manière très claire.


Message édité par anapajari le 11-10-2006 à 16:10:28
Reply

Marsh Posté le 11-10-2006 à 16:21:22    

.


Message édité par donny3 le 11-10-2006 à 16:28:44
Reply

Sujets relatifs:

Leave a Replay

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