Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut [XML::Twig] Changer nom de balise xml et recherche de documentation en francais

    Bonjour a tous,

    j'ai beau cherché de la doc sur du XmlTwig en français, mai je trouve qu'en anglais, y aurait'il parmi vous qui pe m'indique ou je peux trouvé de la doc en français vue que moi et l'anglais ca fé 2.

    merci d'avance
    bonne journée

  2. #2
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 318
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 1 318
    Points : 2 910
    Points
    2 910

    Par défaut

    Tu peux déjà consulter l'excellent tutoriel de Djibril:

    http://djibril.developpez.com/tutoriels/perl/perl-xml/
    Mes articles sur La programmation fonctionnelle en Perl publiés sur ce site:

    ________
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut

    merci LOLO
    c'est déjà fais

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 16 744
    Points : 490 680
    Points
    490 680

    Par défaut

    Bonjour,

    Déjà quelques remarques très importantes :
    1. lorsque vous cherchez la documentation d'un module, elle ne se trouve principalement que sur le site du CPAN et c'est toujours en anglais. Il va falloir s'y faire car c'est la langue de référence en informatique. Si l'anglais et vous ça fait deux, bah va falloir s'améliorer car le code fourni fera également deux avec vous ;
    2. mon article cité ci-dessus par LOlo78 pourra vous donner un premier aperçu du module. Vous y trouverez en fin d'article une liste de liste de liens dont celui du créateur du module qui contient une documentation avec des exemples, mais c'est aussi en anglais .


    La seule chose que vous pourrez avoir en français est de l'aide sur ce forum, ce qui est déjà très intéressant.
    Bonne Lecture !

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

  5. #5
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut Erreur : changer nom de balise xml

    Bonjour,

    je cherche a modifier le nom de quelques balise, c-a-d, dans la balise <Prenoms> j'ai plusieur balise <Prenom> a l'interieur et j'aimerai modifier le nom de ses dernier pour avoir <Prenom1><Prenom2>...
    Code xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
        <Enveloppe>
           <ligne>01</ligne>
        </Enveloppe>
        <Individu>
            <Demande>
                <Personne>
                    <Noms>
                        <NomF>foot</NomF>
    					<NomU>ball</NomU>
                    </Noms>
                    <Prenoms>
                        <Prenom>AAAA</Prenom>
    					<Prenom>BBBB</Prenom>
     <Prenom>CCC</Prenom>
                    </Prenoms>
                    <Naissance>
                        <Date>2012-06-20</Date>
                        <Lieu>
                            <Localite code="75000"/>
    						<Pays>France</Pays>
                        </Lieu>
                    </Naissance>
                    <Sexe>Homme</Sexe>
                </Personne>
            </Demande>
        </Individu>
    </Lettre>

    pour cela j'ai ecrit le code suivant mai ca ne marche pas, je sais pas comment utilisé la balise children et comment atteindre la balise <Prenoms> en profondeur: mon code perl le voila
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/perl
    use XML::Twig;
     
    my $t= XML::Twig->new();
      $t->parsefile( 'fichier.xml');
      my $root= $t->root;
      my @Individu = $root->children ( 'Individu');
      foreach my $Individu (@Individu) {
    	$i = 1;
    	foreach my $Prenom ( $Individu->children('Demande')->children('Personne')->children('Prenoms')->children('Prenom'))
     
    		{ $Prenom->set_tag( 'Prenom'.$i); 
    		$i = $i+1;
    		}           # turn them into p
    	}
    open(PF, "> out.xml") or die "can't open file $!\n";
    $t->print(\*PF);                            # output the document
    merci d'avance de vos réponse

  6. #6
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut

    Bonjour ,

    djibril, dans l'exemple que vous traité, il est constitué de 3Niveau (annuaire,personne,langage), mais moi je comprend pas comment on peut atteindre un niveau encore plus haut vue que j'ai un fichier avec 6 ou 7 niveau, je veux changer le nom d'une balise qui est au 6eme niveau, j'écris le code suivant :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    my @Individu = $root->children ( 'Individu');
    $i = 1;
    	foreach my $Prenom ( $Individu->children('Demande')->children('Personne')->children('Prenoms')->children('Prenom'))
     
    		{ $Prenom->set_tag( 'Prenom'.$i); 
    		$i = $i+1;
    		}
    mai ca na pas l'air de fonctionné.
    quelqu'un pourrez me donnée quelque indication
    merci a tous

  7. #7
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 16 744
    Points : 490 680
    Points
    490 680

    Par défaut

    Bonjour,

    Pouvez-vous me montrer votre fichier XML et me redire ce que vous souhaitez faire ?
    Il y a peut-être une façon simple de procéder pour réaliser votre programme avec XML::Twig.

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

  8. #8
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 16 744
    Points : 490 680
    Points
    490 680

    Par défaut

    Lorsque vous poster du code ou des exemples, merci de les indenter. Cela permet d'avoir une meilleure lisibilité.

    Voici donc votre fichier XML :
    Code xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
      <Enveloppe>
        <ligne>01</ligne>
      </Enveloppe>
      <Individu>
        <Demande>
          <Personne>
            <Noms>
              <NomF>foot</NomF>
              <NomU>ball</NomU>
            </Noms>
            <Prenoms>
              <Prenom>AAAA</Prenom>
              <Prenom>BBBB</Prenom>
              <Prenom>CCC</Prenom>
            </Prenoms>
            <Naissance>
              <Date>2012-06-20</Date>
              <Lieu>
                <Localite code="75000"/>
                <Pays>France</Pays>
              </Lieu>
            </Naissance>
            <Sexe>Homme</Sexe>
          </Personne>
        </Demande>
      </Individu>
    </Lettre>
    Vous souhaitez le transformer en quel fichier ?

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

  9. #9
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut

    Re -bonjour

    le fichier XML est le suivant :
    Code xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
        <Enveloppe>
           <ligne>02</ligne>
        </Enveloppe>
        <Individu>
            <Demande>
                <Personne>
                    <Noms>
                        <NomF>foot</NomF>
    		    <NomU>ball</NomU>
                    </Noms>
                    <Prenoms>
                        <Prenom>AAAA</Prenom>
    		    <Prenom>BBBB</Prenom>
                        <Prenom>CCC</Prenom>
                    </Prenoms>
                    <Naissance>
                        <Date>2012-06-20</Date>
                        <Lieu>
                            <Localite code="75000"/>
    						<Pays>France</Pays>
                        </Lieu>
                    </Naissance>
                    <Sexe>Homme</Sexe>
                </Personne>
            </Demande>
        </Individu>
        <Individu>
            <Demande>
                <Personne>
                    <Noms>
                        <NomF>Nom1</NomF>
    		    <NomU>Nom2</NomU>
                    </Noms>
                    <Prenoms>
                        <Prenom>ZZZZZ</Prenom>
    		    <Prenom>UUUUU</Prenom>
                    </Prenoms>
                    <Naissance>
                        <Date>2012-06-20</Date>
                        <Lieu>
                            <Localite code="75000"/>
    			<Pays>France</Pays>
                        </Lieu>
                    </Naissance>
                    <Sexe>Homme</Sexe>
                </Personne>
            </Demande>
        </Individu>
    </Lettre>
    et je cherche a modifier les balise <Prenom> par <Prenom1><Prenom2><Prenom3>

    merci de ton aide

  10. #10
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut

    je cherche a le modifier en ce fichier :
    Code :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
        <Enveloppe>
           <ligne>02</ligne>
        </Enveloppe>
        <Individu>
            <Demande>
                <Personne>
                    <Noms>
                        <NomF>foot</NomF>
    		    <NomU>ball</NomU>
                    </Noms>
                    <Prenoms>
                        <Prenom1>AAAA</Prenom1>
    		    <Prenom2>BBBB</Prenom2>
                        <Prenom3>CCC</Prenom3>
                    </Prenoms>
                    <Naissance>
                        <Date>2012-06-20</Date>
                        <Lieu>
                            <Localite code="75000"/>
    			<Pays>France</Pays>
                        </Lieu>
                    </Naissance>
                    <Sexe>Homme</Sexe>
                </Personne>
            </Demande>
        </Individu>
        <Individu>
            <Demande>
                <Personne>
                    <Noms>
                        <NomF>Nom1</NomF>
    		    <NomU>Nom2</NomU>
                    </Noms>
                    <Prenoms>
                        <Prenom1>ZZZZZ</Prenom1>
    		    <Prenom2>UUUUU</Prenom2>
                    </Prenoms>
                    <Naissance>
                        <Date>2012-06-20</Date>
                        <Lieu>
                            <Localite code="75000"/>
    			<Pays>France</Pays>
                        </Lieu>
                    </Naissance>
                    <Sexe>Homme</Sexe>
                </Personne>
            </Demande>
        </Individu>
    </Lettre>

  11. #11
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 16 744
    Points : 490 680
    Points
    490 680

    Par défaut

    Je t'ai fait un programme simple très optimisé au cas où tes fichiers XML seraient gros.
    Le principe est le suivant : Je ne parcours que la balise <Prenom> (chunk by chunk) => rapidité, mémoire utilisée de façon pertinente. Ensuite, sachant que dans la balise <Prenoms>, je n'ai que des balises <Prenom>, je vais juste récupérer le niveau de position de ma balise via la méthode pos du module et je renomme ma balise.

    XML::Twig est un module très très puissant car il possède énormément de méthodes permettant de jouer avec ses fichiers XML. Il faut juste être patient pour bien décortiquer la documentation.

    Fichier XML d'entrée :
    Code xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
      <Enveloppe>
        <ligne>02</ligne>
      </Enveloppe>
      <Individu>
        <Demande>
          <Personne>
            <Noms>
              <NomF>foot</NomF>
              <NomU>ball</NomU>
            </Noms>
            <Prenoms>
              <Prenom>AAAA</Prenom>
              <Prenom>BBBB</Prenom>
              <Prenom>CCC</Prenom>
            </Prenoms>
            <Naissance>
              <Date>2012-06-20</Date>
              <Lieu>
                <Localite code="75000"/>
                <Pays>France</Pays>
              </Lieu>
            </Naissance>
            <Sexe>Homme</Sexe>
          </Personne>
        </Demande>
      </Individu>
      <Individu>
        <Demande>
          <Personne>
            <Noms>
              <NomF>Nom1</NomF>
              <NomU>Nom2</NomU>
            </Noms>
            <Prenoms>
              <Prenom>ZZZZZ</Prenom>
              <Prenom>UUUUU</Prenom>
              <Prenom>aaa</Prenom>
            </Prenoms>
            <Naissance>
              <Date>2012-06-20</Date>
              <Lieu>
                <Localite code="75000"/>
                <Pays>France</Pays>
              </Lieu>
            </Naissance>
            <Sexe>Homme</Sexe>
          </Personne>
        </Demande>
      </Individu>
    </Lettre>

    Code Perl :
    Code :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Twig;
     
    my $fichier_xml = 'test.xml';
    my $output_xml  = 'output.xml';
     
    my $twig = XML::Twig->new(   
        twig_handlers => {  
          Prenom    => \&gestion_dun_prenom, 
        },
        pretty_print => 'indented',               
    );
    $twig->parsefile($fichier_xml);
     
     
    open( my $fh, '>', $output_xml) or die "Impossible de créer le fichier XML $output_xml : $!";
    $twig->print($fh); 
    close $fh;
     
    sub gestion_dun_prenom {
      my ($twig, $twig_prenom) = @_;
     
      # On renomme la balise en récuprant son niveau de position
      $twig_prenom->set_tag( $twig_prenom->name . $twig_prenom->pos ); 
      return;
    }
    Fichier de sorti :
    Code xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Lettre>
      <Enveloppe>
        <ligne>02</ligne>
      </Enveloppe>
      <Individu>
        <Demande>
          <Personne>
            <Noms>
              <NomF>foot</NomF>
              <NomU>ball</NomU>
            </Noms>
            <Prenoms>
              <Prenom1>AAAA</Prenom1>
              <Prenom2>BBBB</Prenom2>
              <Prenom3>CCC</Prenom3>
            </Prenoms>
            <Naissance>
              <Date>2012-06-20</Date>
              <Lieu>
                <Localite code="75000"/>
                <Pays>France</Pays>
              </Lieu>
            </Naissance>
            <Sexe>Homme</Sexe>
          </Personne>
        </Demande>
      </Individu>
      <Individu>
        <Demande>
          <Personne>
            <Noms>
              <NomF>Nom1</NomF>
              <NomU>Nom2</NomU>
            </Noms>
            <Prenoms>
              <Prenom1>ZZZZZ</Prenom1>
              <Prenom2>UUUUU</Prenom2>
              <Prenom3>aaa</Prenom3>
            </Prenoms>
            <Naissance>
              <Date>2012-06-20</Date>
              <Lieu>
                <Localite code="75000"/>
                <Pays>France</Pays>
              </Lieu>
            </Naissance>
            <Sexe>Homme</Sexe>
          </Personne>
        </Demande>
      </Individu>
    </Lettre>

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

  12. #12
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 102
    Points : 12
    Points
    12

    Par défaut

    ca marche super
    merci djibril

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •