VB / XML - modifier balises

VB / XML - modifier balises - VB/VBA/VBS - Programmation

Marsh Posté le 13-04-2015 à 16:19:59    

Bonjour,
 
J'ai regardé les différents topics à ce sujet que j'ai pu trouvé, mais je n'ai pas réussi à l'adapter au code sur lequel je travaille.  
En gros, j'ai des fichiers xml que je parcours, et je voudrais modifier toutes les lignes "commentaires".  
Actuellement il y a ceci :  

Code :
  1. Do While Not EOF(InputFileNumber) ' Loop until end of file.
  2.             Line Input #InputFileNumber, TextLine
  3.             'Une fois la ligne commentaires trouvée on donne une valeur vide à value
  4.             If InStr(1, TextLine, "<Prop InternalName=""COMMENTAIRES"" " ) Then
  5.                 Print #OutputFileNumber, "<Prop InternalName=""COMMENTAIRES"" Value="""" Label=""Commentaire"" />"
  6.             Else
  7.                 Print #OutputFileNumber, TextLine
  8.             End If
  9.         Loop


 
Sauf que je voudrais si possible dire que à partir de <Prop InternalName="COMMENTAIRES" jusqu'à la fermeture de la balise />, il remplace tout par "<Prop InternalName=""COMMENTAIRES"" Value="""" Label=""Commentaire"" />".
 
Mon problème étant que ces lignes que je veux modifier peuvent se présenter de différentes manière :  
sur plusieurs lignes :

Code :
  1. <Prop InternalName="COMMENTAIRES"
  2.           Value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  3.           Label="Commentaire" />


 
ou sur une seule :

Code :
  1. <Prop InternalName="COMMENTAIRES" Value="xxx" Label="Commentaire" />


 
D'où la nécessité d'aller chercher la fermeture de balise...  
 
Une idée ?  J'ai vu qu'on pouvait modifier la valeur à l'intérieur d'une balise, avec les node, mais ce code parcourt un fichier je crois, et il ne spécifie pas xmlDocument. Y-a-t-il un moyen avec l'exemple que j'ai mis précédemment ou je dois modifier tout le code pour intégrer les xmlDocument?
 
 :??:

Reply

Marsh Posté le 13-04-2015 à 16:19:59   

Reply

Marsh Posté le 14-04-2015 à 08:22:24    

On ne peut pas regarder la ligne précédente et la ligne suivante ?
J'ai essayé ça puis j'ai vu que TextLine renvoyait la valeur de la ligne... y'a pas un moyen de regarder la ligne + 1 et - 1 ?
 
 

Code :
  1. 'La ligne qu'on veut modifier peut se trouver sur plusieurs ou une seule lignes.
  2. 'On fait plusieurs tests pour le déterminer
  3. 'Une fois la ligne commentaires trouvée on donne une valeur vide à value
  4. If InStr(1, TextLine, "<Prop InternalName=""COMMENTAIRES"" Value=" ) Then
  5.     'Si la prochaine ligne est Label, on ne ferme pas la balise
  6.     If InStr(1, TextLine + 1, "Label" ) Then
  7.          Print #OutputFileNumber, "<Prop InternalName=""COMMENTAIRES"" Value="""""; ""
  8.     Else 'Et si ce n'est pas le cas, il faut la fermer
  9.          Print #OutputFileNumber, "<Prop InternalName=""COMMENTAIRES"" Value="""" Label=""Commentaires"" />"
  10.     End If
  11. Else
  12.     Print #OutputFileNumber, TextLine
  13. End If


Message édité par minimoack le 14-04-2015 à 08:23:22
Reply

Marsh Posté le 14-04-2015 à 09:03:59    

Désolée j'ai oublié de mettre un exemple de mes balises.
 
Dans mes recherches pour modifier un fichier XMl, j'ai trouvé comment modifier la valeur d'une balise comme ça :  
<CD> Valeur </CD>
 
Mais je voudrais modifier une balise qui ressemble à ça  
<CD=disk Value="128Mb" Label="plop">
 
En gros pour mettre Value="" pour chaque <CD=disk
 
:??: :??: :??:

Reply

Marsh Posté le 14-04-2015 à 09:56:14    

 
           Bonjour.
 
           Là les fichiers sont traités comme de simples fichiers texte …  Mais pourquoi ne pas utiliser Excel pour lire les fichiers XML ?
 
           FAQ Excel - Manipuler les fichiers XML  …
 

Reply

Marsh Posté le 14-04-2015 à 10:25:40    

Oui effectivement, mais vu que je "découvre" tout juste le code qu'on m'a donné, je voulais savoir s'il y a une solution sans tout le modifier en fait. Mais je vais surement me pencher sur cette solution au final, car je ne trouve pas beaucoup d'info ^^

Reply

Marsh Posté le 15-04-2015 à 09:19:02    

 
           A noter aussi depuis la version 2007 la méthode  Workbooks.OpenXML  …
 

Reply

Sujets relatifs:

Leave a Replay

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