IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

pb xml::twig


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut pb xml::twig
    Bonjour,

    débutant en perl (niveau zéro de chez zéro même ), et devant effectuer de toute urgence une correction sur un exe en perl, je me tourne vers vous tous.

    J'explique : je dois récupérer des infos d'un fichier xml (balises ou attributs).
    Pour cela j'ai développé un petit log de test qui marche à merveille.
    Le problème c'est pour incorporer mon code à celui déjà existant, car il faut que je le mette dans une fonction, qui retourne au final une hashtable...

    Dans cette hashtable, on aura :
    [code balise n°1] contenu balise n°1; contenu attribut n°1
    [code balise n°2] contenu balise n°2; contenu attribut n°2
    etc...

    j'utilise xml::twig car cela me permet de trouver les balises qui peuvent être à des niveaux différents d'un fichier à l'autre, mais dans l'absolu, l'information est toujours présente dans les fichiers.

    Donc, quand j'incorpore mon bout de code (qui ne faisait qu'afficher à l'écran les infos), dans le programme à débogger, je n'arrive pas à faire suivre les données.
    Voici le code:
    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
     
    sub getpath{
    	#retourne la hashMap avec le titre N° et le nom de fichier
    	my ($goodFileXML, $Folder)=@_;
    	my $ddate = ""; #passer la date de revision en parametre
    	my $refHash = extractTitle($goodFileXML, \$ddate, $Folder);
    	return $refHash;
    }
     
    sub extractTitle{
    	my ($ficName, $refDate, $Folder) = @_;
    	#créer une map avec le titre et les noms des fichiers
    	my %hashTitleFic;
     
    # Utilisation des handlers
    	my $twig = new XML::Twig( Twig_handlers => { 'du-sol' => \&dusol, }, );
    	# creation d'un objet twig
    	$twig->parsefile($ficName);
     
            my ($refh) = \%hashTitleFic;
     
    	return $refh; #retourner la référence sur la hashmap
    }
     
     
    sub dusol {
    	my ($twig, $TwigSol, %hashTitleFic, $key) = @_;
            my $value = "";
     
    	$value= $TwigSol->field('title');
    	$key= $TwigSol->att('code');
    	foreach my $TwigRef ( $TwigSol->children('sol-mdata-ref') ) {
    		$value=$value.";".$TwigRef->att('href');
            }
    	$hashTitleFic{$key} = $value;
     
    	# vide de la memoire le contenu de la balise du-sol
           	#$twig->purge;
    	return %hashTitleFic;
    }
    ps : mon code qui marche début aux Handlers....
    et ce que je souhaite faire suivre est %hashTitleFic

    j'espère avoir été assez claire dans mon explication.

    Pouvez-vous m'aider?
    D'avance merci pour vos réponses et votre aide.

    Cordialement,
    Pirotes31.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut
    Personne pour m'aider...?

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il faudrait donner un exemple du contenu du fichier XML et du résultat attendu.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut pb xml::twig
    Merci pour votre réponse.

    Voici un exemple de fichier xml de départ :

    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
     
    <produit id="1">
      <titre>Ici le titre du produit</titre>
      <ref href="./test.xml" />
      <niv id="1">
        <titreniv>Niveau 1</titreniv>
        <niv id="2">
          <titreniv>Niveau 2</titreniv>
          <groupe code="grp1">
            <titregrp>Groupe 1</titregrp>
            <du-sol code="001">
              <title>titre solution</title>
              <sol-cont href="./grp/nom1.xml" />
              <sol-mdata-ref href="./sgrp/nom1-data.xml" />
            </du-sol>
          </groupe>
        </niv>
      </niv>
    </produit>
    Sachant qu'il peut y avoir plus de 2 <niv> d'un fichier à l'autre.

    On veut obtenir ceci :
    hastable(001)="titre solution";"./sgrp/nom1-data.xml"

    En espérant avoir été assez précise.

    Merci pour votre aide et vos réponses.

    Cordialement,

    Pirotes31

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Peux tu nous mettre un code perl fonctionnel histoire que l'on puisse juste faire un copier coller et tester pour voir ce que te donne ton code actuel. Et après on pourra essayer de le modifier.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut
    ok, j'essaie ça cet aprèm car c'est un code "pro".. et il faut que je "taille".

    encore merci.

    Voici le code 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #!/usr/bin/perl -w
    use strict;
    use locale;
    use XML::Simple;
    use Data::Dumper;
    use XML::Twig;
     
     
    # Fonctions	
     
    #-----------------------------------------------------------
    # On liste les path de chaque fichier *.xml dans une hashFile
    #-----------------------------------------------------------
    sub getpath{
    	#retourne la hashMap avec le titre N° et le nom de fichier
    	my ($goodFileXML, $Folder)=@_;
    	my $ddate = ""; #passer la date de revision en parametre
    	my $refHash = extractTitle($goodFileXML, \$ddate, $Folder);
    	return $refHash;
    }
     
    sub extractTitle{
    	my ($ficName, $refDate, $Folder) = @_;
    	#créer une map avec le titre et les noms des fichiers
    	my %hashTitleFic;
     
    # Utilisation des handlers
    	my $twig = new XML::Twig( Twig_handlers => { 'du-sol' => \&dusol, }, );
    	# creation d'un objet twig
    	$twig->parsefile($ficName);
     
            my ($refh) = \%hashTitleFic;
     
    	return $refh; #retourner la référence sur la hashmap
    }
     
     
    sub dusol {
    	my ($twig, $TwigSol, %hashTitleFic, $key) = @_;
            my $value = "";
     
    	$value= $TwigSol->field('title');
    	$key= $TwigSol->att('code');
    	foreach my $TwigRef ( $TwigSol->children('sol-mdata-ref') ) {
    		$value=$value.";".$TwigRef->att('href');
            }
    	$hashTitleFic{$key} = $value;
     
    	# vide de la memoire le contenu de la balise du-sol
           	#$twig->purge;
    	return %hashTitleFic;
    }
     
     
    #-----------------------------------------------------------
    # 					MAIN
    #-----------------------------------------------------------
     
    my $goodFileXML="c:\\test\\Fichiers\\GoodFile.xml";
    my $Folder="c:\\test\\Fichiers";
    #Recuperer la liste des path des fichiers dans une hashtable
    my %hashFile;
    my $refhashFile;
    $refhashFile=getpath($goodFileXML, $Folder);
    %hashFile=%$refhashFile;
     
    print "FIN\n\n";
    Je dois respecter cette organisation.

    Encore merci pour votre aide.

    Pirotes31.

Discussions similaires

  1. [XML::Twig] l écriture d un tutorial
    Par ellgafsi dans le forum Modules
    Réponses: 1
    Dernier message: 06/05/2009, 14h51
  2. [XML::Twig] créer une balise
    Par ellgafsi dans le forum Modules
    Réponses: 1
    Dernier message: 30/04/2009, 09h29
  3. XML::Twig et caracteres incorrectes
    Par ellgafsi dans le forum Modules
    Réponses: 12
    Dernier message: 26/03/2009, 15h55
  4. problème "require" XML::Twig.
    Par Dimension_N dans le forum Modules
    Réponses: 5
    Dernier message: 27/02/2009, 02h33
  5. [XML::Twig] Commentaires dans le fichier XML réécrit
    Par knarf87 dans le forum Modules
    Réponses: 2
    Dernier message: 07/05/2008, 09h24

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