p
u
b
l
i
c
i
t
é
publicité
  1. #21
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    17 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 690
    Points : 492 624
    Points
    492 624

    Par défaut

    Juste pour précision, dans un fichier, il n'y a qu'une seule balise <measTypes> ?
    Et celle-ci est associée l'unique balise measValues qui contient toutes les balises MeasValue avec les informations ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  2. #22
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    Oui, là il n'y en a qu'une car j'ai pris un extrait du fichier.

    En réalité il y en a plusieurs mais tu as raison, à chaque fois qu'il y a la balise measTypes, vient ensuite la balise measValues.

    Par exemple, il y a une balise measTypes avec 7 MeasType, puis dans le measValues il y a 250 (ça peut être différent) measObjInstId avec pour chacun d'eux 7 iValue.
    Et ça reprend avec une balise measTypes avec 15 MeasType etc...

  3. #23
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    Petite précision, la balise measValues n'est pas une balise "enfant" de measTypes.

  4. #24
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    J'ai apporté une amélioration au code:
    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Twig;
     
    my $file = 'output-test.txt';
     
    my $twig1=XML::Twig->new(
    	TwigRoots => {'MeasType' => \&print_type, 'measObjInstId' => \&print_type, 'iValue' => \&print_type}
    	);
     
    $twig1->parsefile($file);
     
    my @type;
     
    sub print_type
    {my ($twig1, $elt)=@_;
    	# @type = $elt->text;
    	print $elt->text;
    	print "\n";
    	$twig1->purge;        #libère la mémoire
    }

  5. #25
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    17 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 690
    Points : 492 624
    Points
    492 624

    Par défaut

    Voici un exemple de programme testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Twig;
     
    my $fichier_xml = 'test.xml'; 
     
    my $twig = new XML::Twig( 
      Twig_handlers => { 
        'measTypes' => \&MeaTypes,
        'MeasValue' => \&AnalyseValues, 
      }, 
    );
     
    my @LesMeaTypes;
    $twig->parsefile($fichier_xml);
     
    # Stockage des MeaTypes 
    sub MeaTypes {
      my ( $twig, $TwigMeaTypes ) = @_;
     
      @LesMeaTypes = ();
      foreach my $TwigMeasType ( $TwigMeaTypes->children('MeasType') ) {
        push @LesMeaTypes, $TwigMeasType->text;
      }
     
      return;
    } 
     
    sub AnalyseValues {
      my ( $twig, $TwigMeasValue ) = @_;
     
      my $measObjInstId = $TwigMeasValue->first_child('measObjInstId')->text;
      print "measObjInstId : $measObjInstId\n";
      my $compteur = 0;
      foreach my $TwigMeasType ( $TwigMeasValue->first_child('measResults')->children('iValue') ) {
        print "$LesMeaTypes[$compteur] = ", $TwigMeasType->text, "\n";
        $compteur++;
      }
     
      return;
    }
    Je ne sais pas s'il répond par la suite à vos cas particuliers. Il faudrait déjà le tester.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  6. #26
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    Maintenant le code (que j'ai mis plus haut) parse le fichier XML une seule fois (merci pour la remarque) et en résultat j'ai bien les valeurs une par une comme elle apparaisse dans le fichier XML.
    Reste à savoir comment les afficher comme je le veux?

  7. #27
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    Citation Envoyé par djibril Voir le message
    Voici un exemple de programme testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Twig;
     
    my $fichier_xml = 'test.xml'; 
     
    my $twig = new XML::Twig( 
      Twig_handlers => { 
        'measTypes' => \&MeaTypes,
        'MeasValue' => \&AnalyseValues, 
      }, 
    );
     
    my @LesMeaTypes;
    $twig->parsefile($fichier_xml);
     
    # Stockage des MeaTypes 
    sub MeaTypes {
      my ( $twig, $TwigMeaTypes ) = @_;
     
      @LesMeaTypes = ();
      foreach my $TwigMeasType ( $TwigMeaTypes->children('MeasType') ) {
        push @LesMeaTypes, $TwigMeasType->text;
      }
     
      return;
    } 
     
    sub AnalyseValues {
      my ( $twig, $TwigMeasValue ) = @_;
     
      my $measObjInstId = $TwigMeasValue->first_child('measObjInstId')->text;
      print "measObjInstId : $measObjInstId\n";
      my $compteur = 0;
      foreach my $TwigMeasType ( $TwigMeasValue->first_child('measResults')->children('iValue') ) {
        print "$LesMeaTypes[$compteur] = ", $TwigMeasType->text, "\n";
        $compteur++;
      }
     
      return;
    }
    Je ne sais pas s'il répond par la suite à vos cas particuliers. Il faudrait déjà le tester.
    Tout simplement WOOOHHH.

    C'est exactement ce que je recherchais, ça marche nickel

    Un grand merci!

  8. #28
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    17 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 690
    Points : 492 624
    Points
    492 624

    Par défaut

    Si vous avez besoin de plus d'explications, n'hésitez pas.
    Sinon, comment faites-vous la conversion ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  9. #29
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    Voilà ce que j'utilisais (dans un autre script):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if ($ligne =~ m{<measObjInstId>\s*(.*?)\s*</measObjInstId>}) {
    		$ligne =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
    		$ligne =~ s/\s+//g;
    		print FILE_OUT "$ligne\n";
    	}
    Il faut que je l'adapte pour ce script maintenant.

  10. #30
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    17 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 690
    Points : 492 624
    Points
    492 624

    Par défaut

    Il suffit d'utiliser une procédure. Et pour mettre tout le résultat dans un fichier, voici le programme complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Twig;
     
    my $fichier_xml = 'test.xml'; 
    my $fichier_out = 'test.txt'; 
     
    my $twig = new XML::Twig( 
      Twig_handlers => { 
        'measTypes' => \&MeaTypes,
        'MeasValue' => \&AnalyseValues, 
      }, 
    );
     
    my @LesMeaTypes;
    open my $fh, '>', $fichier_out or die "Impossible de créer $fichier_out\n"; 
    $twig->parsefile($fichier_xml);
    close $fh;
    # Stockage des MeaTypes 
    sub MeaTypes {
      my ( $twig, $TwigMeaTypes ) = @_;
     
      @LesMeaTypes = ();
      foreach my $TwigMeasType ( $TwigMeaTypes->children('MeasType') ) {
        push @LesMeaTypes, $TwigMeasType->text;
      }
     
      return;
    } 
     
    sub AnalyseValues {
      my ( $twig, $TwigMeasValue ) = @_;
     
      my $measObjInstId = $TwigMeasValue->first_child('measObjInstId')->text;
      print {$fh} "measObjInstId : $measObjInstId\n";
      my $compteur = 0;
      foreach my $TwigMeasType ( $TwigMeasValue->first_child('measResults')->children('iValue') ) {
        print {$fh} conversion($LesMeaTypes[$compteur]), ' = ', $TwigMeasType->text, "\n";
        $compteur++;
      }
     
      return;
    } 
     
    sub conversion {
      my $mot = shift;
     
      $mot =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
    	$mot =~ s/\s+//g;
      return $mot;
    }

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  11. #31
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    17 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 690
    Points : 492 624
    Points
    492 624

    Par défaut

    Merci de penser au tag résolu si c'est OK.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  12. #32
    Candidat au titre de Membre du Club
    Inscrit en
    septembre 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 52
    Points : 13
    Points
    13

    Par défaut

    C'est fait, j'attendais juste de voir si la partie "conversion" était ok pour toi, mais ce n'est pas le même sujet.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Extraction des données des tables SQL en XML avec MKFramework
    Par amooola86 dans le forum MkFramework
    Réponses: 16
    Dernier message: 27/06/2014, 10h15
  2. [JDOM] Extraction des données à partir du XML
    Par paulcomt dans le forum XML
    Réponses: 3
    Dernier message: 27/09/2010, 17h01
  3. extraction des données du xml et hashmap
    Par vanesa dans le forum XML
    Réponses: 1
    Dernier message: 05/03/2008, 17h57
  4. [DOM] parsing de xml et traitement des données
    Par vincent62149 dans le forum XML
    Réponses: 2
    Dernier message: 04/03/2008, 10h06
  5. Réponses: 3
    Dernier message: 14/03/2007, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo