parser un fichier xml

parser un fichier xml - Perl - Programmation

Marsh Posté le 05-10-2006 à 14:01:43    

salut
 
 
Est ce que quelqu'un aurait un script qui permette de parser un fichier xml ?
 
 
Merci

Reply

Marsh Posté le 05-10-2006 à 14:01:43   

Reply

Marsh Posté le 05-10-2006 à 14:15:16    

search.cpan.org -> xml

Reply

Marsh Posté le 05-10-2006 à 14:30:00    

Citation :


 
#######################################################################
 
use strict;
use XML::Parser;
 
my $in_title=0;
 
my $parser= new XML::Parser( Style => 'Stream');
 
if( $ARGV[0]) { $parser->parsefile( $ARGV[0]); }   # parse the file
else          { $parser->parse( \*STDIN);   }
 
exit;
 
sub StartTag                                       # called for all star tags                                                 { my( $p, $gi, %att)= @_;
    if( ($gi eq 'bktlong') || ($gi eq 'bktshort'))
      { print "<$gi ";                             # will be closed in Text
        $in_title=1;                               # triggers Text processing  
      }
    else
      { print $p->recognized_string(); }           # else just print
  }
 
sub Text                                           # called for each string
  { if( $in_title)                                 # if in title
      { my ($title_no, $title_text)=               # separate the num from
            (/\A(\d+)\.?\s*(.*)\Z/);               # the rest of the text
        print "num=\"$title_no\">";                # close the title tag
        print "<num>$title_no</num>$title_text";   # print the num alement
        $in_title=0;                               # not in title anymore
      }
    else
      { print ; }                                  # else just print
  }


 
j'ai troouver ce code sur le net donc je l'ai mis dans un fichier .pl
je lance en mettant dans ma ligne de commande le nom du fichier xml mais sa bogue

Citation :

syntax error at C:\Documents and Settings\t\Bureau\t\xml.pl line 30
, near "sub StartTag                                       # called for all star
 tags                                                 { my( $p, $gi, %att)= @_;
    if"
Execution of C:\Documents and Settings\t\Bureau\t\xml.pl aborted du
e to compilation errors.

Reply

Marsh Posté le 05-10-2006 à 14:57:08    

toute la ligne la:
[code]sub StartTag                                       # called for all star tags                                                 { my( $p, $gi, %att)= @_; [/exit]
est écrite sur une seule ligne, l'accolade devrait être une ligne plus bas.

Reply

Marsh Posté le 05-10-2006 à 15:03:34    

merci je viens de voir
il est bizarre ce script
il m'affiche tout mon fichier xml dans ma fenetre de commande

Reply

Marsh Posté le 05-10-2006 à 15:43:05    

j'ai beau tourner sur le net
j'ai pas trouver de script

Reply

Marsh Posté le 05-10-2006 à 22:42:54    

parser un fichier XML ca peut vouloir dire plein de choses.
Tout depend de ce que tu veux extraire...

Reply

Marsh Posté le 06-10-2006 à 08:14:41    

ok  
merci pospos
mon fichier se presente ainsi
<source nom="Fournisseur" ....>
<champ  nom="numfournisseur" type="varchar"...>
 
je souhaite extraire le nom de la source et en dessous du nom les nom de champs et le type qui leur corresponde.
Fournisseur
numfournisseur varchar
adresse           varchar
....
 
est ce possible ?

Reply

Marsh Posté le 06-10-2006 à 13:56:49    

regarde deja ce que tu peux faire avec une solution simple genre XML::Simple
 
Ce module va parser ton XML et le transformer en une structure de données perl dans laqeulle tu pourra recuperer ce que tu veux (mais pour ca il te faudra maitriser cette partie du langage)

Reply

Marsh Posté le 09-10-2006 à 11:31:46    

j'ai essayer xml::simple
mais il ne reconnait pas ForceArray  
Unrecognised option: ForceArray

Reply

Marsh Posté le 09-10-2006 à 11:31:46   

Reply

Marsh Posté le 09-10-2006 à 11:39:28    

C'est surement un problème de syntaxe.
Mais si tu veux qu'on t'aide, il faut nous fournir ton code.

Reply

Marsh Posté le 09-10-2006 à 11:51:54    

voila le code  que j'utilise

Code :
  1. #! /usr/bin/perl
  2. use XML::Simple;
  3. use Data::Dumper;
  4. # creation de l'object:
  5. my $xml = new XML::Simple;
  6. # On lit notre fichier xml
  7. my $data = $xml->XMLin("./test.xml",KeyAttr => [], ForceContent => 1, ForceArray => [qw(file segment)]);
  8. #Je passe en revue chaque fichier (branche "file" dans le xml)
  9. foreach my $file_tab (@{$data->{file}}){
  10.        print $file_tab->{name}."\n";
  11.     foreach my $segment_tab (@{$file_tab->{segments}->{segment}}){
  12.         print "\t".$segment_tab->{content}."\n";
  13.    
  14.     }
  15. }


 
 
fichier xml

Citation :


 
<?xml version="1.0" encoding="iso-8859-1" ?>
<xml>
 <file name="file1">
  <groups>
   <group>Groupe1</group>
  </groups>
  <segments>
   <segment >Seg1</segment>
   <segment >Seg2</segment>
  </segments>
 </file>
 
 <file name="file2">
  <groups>
   <group>Group2</group>
  </groups>
  <segments>
   <segment >Seg1</segment>
   <segment >Seg2</segment>
   <segment >Seg3</segment>
  </segments>
 </file>
</xml>
 


 
et l'erreur

Citation :


Unrecognised option: ForceArray at C:\Documents and Settings\x\Bureau\x\x.pl line 9

Reply

Marsh Posté le 09-10-2006 à 15:14:36    

personne ne voit ???

Reply

Marsh Posté le 09-10-2006 à 22:01:50    

Essaie de remplacer :  

Code :
  1. ForceArray => [qw(file segment)]


 
par :

Code :
  1. ForceArray => qw(file segment)


 
Ca devrait aller mieux.

Reply

Sujets relatifs:

Leave a Replay

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