Parsing et modification fichier xml

Parsing et modification fichier xml - Perl - Programmation

Marsh Posté le 28-11-2008 à 16:00:22    

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 :
  1. #!/usr/bin/perl
  2. # use module
  3. use strict;
  4. use XML::DOM;
  5. use Data::Dumper;
  6. # parsing du fichier toto.xml
  7. my $parser = new XML::DOM::Parser;
  8. my $doc = $parser->parsefile("toto.xml" );
  9. if (!defined($parser) || !defined($doc))
  10. {
  11. undef($parser) if (defined($parser));
  12. next;
  13. }
  14. #mise a jour du fichier xml.
  15. my $base_nodes = $doc->getElementsByTagName("Test" );
  16. if (defined($base_nodes) && $base_nodes->getLength > 0 && defined(my $base_node = $base_nodes->item(0)))
  17. {
  18. $base_node->setAttribute("toto", "undeuxtrois" );
  19. $base_node->setAttribute("titi", 55);
  20. $base_node->setAttribute("tata", "cinqsixsept" );
  21. $base_node->setAttribute("yoyo", 44);
  22. }
  23. $doc->printToFile("out.xml" );


 
Mon fichier toto.xml

Code :
  1. <Test>
  2. <donnees>
  3.  <toto></toto>
  4.  <titi></titi>
  5.  <autre>
  6.   <tata></tata>
  7.   <yoyo></yoyo>
  8.  </autre>
  9. </donnees>
  10. </Test>


 
Le fichier out.xml de sortie :

Code :
  1. <Test toto="undeuxtrois" titi="55" tata="cinqsixsept" yoyo="44">
  2. <donnees>
  3.  <toto/>
  4.  <titi/>
  5.  <autre>
  6.   <tata/>
  7.   <yoyo/>
  8.  </autre>
  9. </donnees>
  10. </Test>


 
Ce que j'aimerai c'est que les données soient mises entre les balises c'est a dire comme ceci :

Code :
  1. <Test>
  2. <donnees>
  3.  <toto>undeuxtrois</toto>
  4.  <titi>55</titi>
  5.  <autre>
  6.   <tata>cinqsixsept</tata>
  7.   <yoyo>44</yoyo>
  8.  </autre>
  9. </donnees>
  10. </Test>


 
Merci

Reply

Marsh Posté le 28-11-2008 à 16:00:22   

Reply

Marsh Posté le 28-11-2008 à 17:03:20    

Tu comprends quelque chose au XML??
Parce que pourquoi tu écris ceci:

Citation :

$base_node->setAttribute("toto", "undeuxtrois" );


Si ce n'est pas un attribut, mais le contenu textuel d'un element que tu veux modifier?
 
La, ton script, il fait exactement ce que tu as écrit:
Il crée un attribut toto sur le noeud racine test, trouvé par $doc->getElementsByTagName("Test" );,  
et il lui donne la valeur "undeuxtrois"
D'ou le <Test toto="undeuxtrois"  que tu as ensuite en sortie.
A+,


Message édité par gilou le 28-11-2008 à 17:03:34

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed