p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2008
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    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é Sénior


    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 693
    Points : 4 455
    Points
    4 455
    Billets dans le blog
    1

    Par défaut

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

    http://djibril.developpez.com/tutoriels/perl/perl-xml/
    Articles sur La programmation fonctionnelle en Perl : 1. les opérateurs de liste; 2. les fonctions d'ordre supérieur; 3. étendre le langage.
    Tutoriels De Perl 5 à Perl 6: 1. Les bases du langage; 2. Les nouveautés.

    ________
    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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    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
    17 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 570
    Points : 492 187
    Points
    492 187

    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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    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 : 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
    <?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 : 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
    #!/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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    17 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 570
    Points : 492 187
    Points
    492 187

    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
    17 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 570
    Points : 492 187
    Points
    492 187

    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 : 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
    <?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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    Points : 12
    Points
    12

    Par défaut

    Re -bonjour

    le fichier XML est le suivant :
    Code xml : 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
    <?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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    Points : 12
    Points
    12

    Par défaut

    je cherche a le modifier en ce fichier :
    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
     
    <?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
    17 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 17 570
    Points : 492 187
    Points
    492 187

    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 : 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
    <?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 : 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
    #!/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 : 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
    <?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
    106
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 106
    Points : 12
    Points
    12

    Par défaut

    ca marche super
    merci djibril

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

Discussions similaires

  1. [XML:Twig et ODF::lpOD] Conversion XML en ODT
    Par djibril dans le forum Modules
    Réponses: 41
    Dernier message: 02/04/2011, 13h57
  2. changer le nom des balises dans un XML
    Par ellgafsi dans le forum Modules
    Réponses: 13
    Dernier message: 25/03/2009, 15h10
  3. [XML::Twig] Commentaires dans le fichier XML réécrit
    Par knarf87 dans le forum Modules
    Réponses: 2
    Dernier message: 07/05/2008, 09h24
  4. [XML][XSL]probleme html dans balise xml
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/12/2005, 11h42
  5. [XML] Accent dans les noms de balises
    Par virgul dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/03/2005, 13h42

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