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 :

Parsing et modification fichier xml


Sujet :

Modules Perl

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Parsing et modification fichier xml
    Bonjour,

    je souhaite mettre a jour un fichier xml en remplissant certaines balises mais le soucis c'est que je ne n'obtiens pas ce que j'aimerai.
    Voici ce que j'ai écrit :
    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
    #!/usr/bin/perl
     
    # use module
    use strict;
    use XML::DOM;
    use Data::Dumper;
     
    # parsing du fichier toto.xml
    my $parser = new XML::DOM::Parser;
    my $doc = $parser->parsefile("toto.xml");
    if (!defined($parser) || !defined($doc)) 
    {
    	undef($parser) if (defined($parser));
    	next;
    }
     
    #mise a jour du fichier xml.
    my $base_nodes = $doc->getElementsByTagName("Test");
    if (defined($base_nodes) && $base_nodes->getLength > 0 && defined(my $base_node = $base_nodes->item(0))) 
    {
    	$base_node->setAttribute("toto", "undeuxtrois");
    	$base_node->setAttribute("titi", 55);
    	$base_node->setAttribute("tata", "cinqsixsept");
    	$base_node->setAttribute("yoyo", 44);
    }
     
    $doc->printToFile("out.xml");
    Mon fichier toto.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Test>
    	<donnees>
    		<toto></toto>
    		<titi></titi>
    		<autre>
    			<tata></tata>
    			<yoyo></yoyo>
    		</autre>
    	</donnees>
    </Test>
    Le fichier out.xml de sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Test toto="undeuxtrois" titi="55" tata="cinqsixsept" yoyo="44">
    	<donnees>
    		<toto/>
    		<titi/>
    		<autre>
    			<tata/>
    			<yoyo/>
    		</autre>
    	</donnees>
    </Test>
    Ce que j'aimerai c'est que les données soient mises entre les balises c'est a dire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Test>
    	<donnees>
    		<toto>undeuxtrois</toto>
    		<titi>55</titi>
    		<autre>
    			<tata>cinqsixsept</tata>
    			<yoyo>44</yoyo>
    		</autre>
    	</donnees>
    </Test>
    Merci

  2. #2
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    J'ai hésité à te montrer un bout de code car ma dernière réponse te montrant comment je résoudrais un de tes problèmes n'a apparemment pas attiré ton attention.

    Voilà quand même comment remplir toutes les occurrences d'une liste de balises avec des valeurs données (une légère généralisation de ton problème) :
    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
    #!/usr/bin/env perl -w
    use strict;
    use XML::Twig;
     
    my $data = <<END;
    <Test>
    	<donnees>
    		<toto></toto>
    		<titi></titi>
    		<autre>
    			<tata></tata>
    			<yoyo></yoyo>
    		</autre>
    	</donnees>
    </Test>
    END
     
    my %values_to_set = (
    	'toto' => 'undeuxtrois',
    	'yoyo' => '123'
    );
     
    my $twig = XML::Twig->new (
    	pretty_print => 'indented'
    );
     
    $twig->parsefile('data.xml');
    my $root= $twig->root;
     
    for my $field (keys %values_to_set) {
    	my @nodes = $root->get_xpath("//$field");
    	for (@nodes) {
    		$_->set_text($values_to_set{$field});
    	}
    }
     
    $twig->print;
    En espérant que ce te soit utile.

    cf. XML::Twig et, si tu connais déjà, XML::Twig Quick Reference.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par iblis Voir le message
    J'ai hésité à te montrer un bout de code car ma dernière réponse te montrant comment je résoudrais un de tes problèmes n'a apparemment pas attiré ton attention.

    Voilà quand même comment remplir toutes les occurrences d'une liste de balises avec des valeurs données (une légère généralisation de ton problème) :
    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
    #!/usr/bin/env perl -w
    use strict;
    use XML::Twig;
     
    my $data = <<END;
    <Test>
    	<donnees>
    		<toto></toto>
    		<titi></titi>
    		<autre>
    			<tata></tata>
    			<yoyo></yoyo>
    		</autre>
    	</donnees>
    </Test>
    END
     
    my %values_to_set = (
    	'toto' => 'undeuxtrois',
    	'yoyo' => '123'
    );
     
    my $twig = XML::Twig->new (
    	pretty_print => 'indented'
    );
     
    $twig->parsefile('data.xml');
    my $root= $twig->root;
     
    for my $field (keys %values_to_set) {
    	my @nodes = $root->get_xpath("//$field");
    	for (@nodes) {
    		$_->set_text($values_to_set{$field});
    	}
    }
     
    $twig->print;
    En espérant que ce te soit utile.

    cf. XML::Twig et, si tu connais déjà, XML::Twig Quick Reference.
    jene connaissais pas mais ça m'a bien aidé. Merci

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

Discussions similaires

  1. faire un logiciel qui fait parsing d'un fichier xml existant sur le serveur
    Par wajdiisi2007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/08/2007, 12h09
  2. [JDOM] [Compil] parse d'un fichier xml
    Par ammah dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/06/2006, 17h34
  3. Réponses: 3
    Dernier message: 16/02/2006, 18h38
  4. [VB.NET] modification fichier XML
    Par betaphp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/11/2005, 11h13
  5. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43

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