[VBA] fusionner 2 fichiers XML

fusionner 2 fichiers XML [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 19-10-2010 à 19:40:38    

Bonjour,  
 
j'utilise Excel 2003 SP2 sous winXP, et dans le VBA j'utilise la référence "Microsoft XML 3.0"
 
je cherche à fusionner 2 fichiers XML. Prenons par exemple ces 2 fichiers ci-dessous :
essai1.xml

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <personne age="49">
  4.         <prenom>Georges</prenom>
  5.         <etat>Marié</etat>
  6.         <enfants>
  7.             <enfant>
  8.                 <nom>Tiop</nom>
  9.             </enfant>
  10.         </enfants>
  11.     </personne>
  12.     <personne age="88">
  13.         <nom>Godoh</nom>
  14.         <prenom>Madeleine</prenom>
  15.         <etat>Veuve</etat>
  16.         <enfants>
  17.             <enfant id="top">
  18.                 <nom>Godoh</nom>
  19.                 <prenom>Jean-Marie</prenom>
  20.             </enfant>
  21.             <enfant id="titi">
  22.                 <prenom>Etienne</prenom>
  23.             </enfant>
  24.         </enfants>
  25.     </personne>
  26. </personnes>


essai2.xml

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <personne age="49">
  4.         <nom>Baud</nom>
  5.         <etat>Marié</etat>
  6.         <enfants>
  7.             <enfant>
  8.                 <prenom>Elisabeth</prenom>
  9.             </enfant>
  10.         </enfants>
  11.     </personne>
  12.     <personne age="88">
  13.         <nom>Godoh</nom>
  14.         <prenom>Madeleine</prenom>
  15.         <etat>Veuve</etat>
  16.         <enfants>
  17.             <enfant id="top">
  18.                 <nom>Godoh</nom>
  19.             </enfant>
  20.             <enfant id="titi">
  21.                 <nom>Godoh</nom>
  22.                 <prenom>Etienne</prenom>
  23.             </enfant>
  24.         </enfants>
  25.     </personne>
  26. </personnes>


 
Le résultat serait, si on prend essai1.xml comme référence (le rouge c'est ce qui est ajouté)

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <personne age="49">
  4.         <nom>Baud</nom>
  5.         <prenom>Georges</prenom>
  6.         <etat>Marié</etat>
  7.         <enfants>
  8.             <enfant>
  9.                 <nom>Tiop</nom>
  10.                 <prenom>Elisabeth</prenom>
  11.             </enfant>
  12.         </enfants>
  13.     </personne>
  14.     <personne age="88">
  15.         <nom>Godoh</nom>
  16.         <prenom>Madeleine</prenom>
  17.         <etat>Veuve</etat>
  18.         <enfants>
  19.             <enfant id="top">
  20.                 <nom>Godoh</nom>
  21.                 <prenom>Jean-Marie</prenom>
  22.             </enfant>
  23.             <enfant id="titi">
  24.                 <nom>Godoh</nom>
  25.                 <prenom>Etienne</prenom>
  26.             </enfant>
  27.         </enfants>
  28.     </personne>
  29. </personnes>


 
 
Merci de vos aides
PS: en vrai, vous vous endoutez que essai1.xml et essai2.xml sont plus grands avec plus de nodes et de sous-nodes et de sous-sous-nodes et de sou.....


Message édité par mortelrdv le 19-10-2010 à 19:41:57
Reply

Marsh Posté le 19-10-2010 à 19:40:38   

Reply

Marsh Posté le 03-11-2010 à 18:32:35    

Ouaip enfin la c'est pas de la bète fusion hein...
 
tu compare les données de personnes et tu utilise des critères pour savoir si c'est les mêmes pour ENSUITE rassembler les données
 
tu n'utilise que l'age ? pour décider de si c'est la même personne ?

Reply

Marsh Posté le 04-11-2010 à 11:23:56    

c'est pas une question d'age mais de noeud (nom + attributs) du meme niveau de la meme branche.
 
je ne sais si je m'exprime bien, c'est pas évident. changons l'exemple pour un autre:
essai1.xml

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <personne age="88">
  4.         <nom>Godoh</nom>
  5.         <prenom>Madeleine</prenom>
  6.         <etat>Veuve</etat>
  7.         <enfants>
  8.             <enfant id="top">
  9.                 <nom>Godoh</nom>
  10.                 <prenom>Jean-Marie</prenom>
  11.             </enfant>
  12.             <enfant id="titi">
  13.                 <prenom>Etienne</prenom>
  14.             </enfant>
  15.         </enfants>
  16.     </personne>
  17. </personnes>


essai2.xml

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <morpion>
  4.         <nom>Baud</nom>
  5.         <etat>Marié</etat>
  6.         <enfants>
  7.             <enfant>
  8.                 <prenom>Elisabeth</prenom>
  9.             </enfant>
  10.         </enfants>
  11.     </morpion>
  12.     <personne age="88">
  13.         <nom>Godoh</nom>
  14.         <prenom>Madeleine</prenom>
  15.         <etat>Veuve</etat>
  16.         <enfants>
  17.             <enfant id="top">
  18.                 <nom>Godoh</nom>
  19.             </enfant>
  20.             <enfant id="titi">
  21.                 <nom>Godoh</nom>
  22.                 <prenom>Etienne</prenom>
  23.             </enfant>
  24.         </enfants>
  25.     </personne>
  26. </personnes>


 
Le résultat serait, si on prend essai1.xml comme référence (le rouge c'est ce qui est ajouté)

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <personnes>
  3.     <personne age="88">
  4.         <nom>Godoh</nom>
  5.         <prenom>Madeleine</prenom>
  6.         <etat>Veuve</etat>
  7.         <enfants>
  8.             <enfant id="top">
  9.                 <nom>Godoh</nom>
  10.                 <prenom>Jean-Marie</prenom>
  11.             </enfant>
  12.             <enfant id="titi">
  13.                 <nom>Godoh</nom>
  14.                 <prenom>Etienne</prenom>
  15.             </enfant>
  16.         </enfants>
  17.     </personne>
  18.     <morpion>
  19.         <nom>Baud</nom>
  20.         <etat>Marié</etat>
  21.         <enfants>
  22.             <enfant>
  23.                 <prenom>Elisabeth</prenom>
  24.             </enfant>
  25.         </enfants>
  26.     </morpion>
  27. </personnes>


Reply

Sujets relatifs:

Leave a Replay

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