Bonjour,

Je dispose d'un fichier XML qui a la forme suivante:
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
<personnes>
  <personne>
     <nom>NOM1</nom>
     <prenom>PRENOM1</prenom>
  <personne/>
  <personne>
     <nom>NOM2</nom>
     <prenom>PRENOM2</prenom>
  <personne/>
  <personne>
     <nom>NOM3</nom>
     <prenom>PRENOM3</prenom>
  <personne/>
etc...
 
<personnes/>
Cependant les noms ont des erreurs et j'aimerait donc les modifier.

Lorsque j'essaie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
ptree pt
read_xml(filename,pt);
ptree &pt_personnes = pt.get_child("personnes");
ptree &pt_personne = pt_personnes.get_child("personne");
pt_personne.put("NOM","NOM1modifie");
J'arrive bien à modifier un des noms.
Mais si j'itère sur tous les nom:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
ptree pt
read_xml(filename,pt);
ptree &pt_personnes = pt.get_child("personnes");
for( ptree::iterator &it = pt_personnes.begin(); it != pt_personnes.end();it++){
        ptree &pt_personne = it->second;
        pt_personne.put("NOM","NOM1modifie");
}
write_xml(filename, pt);
Je ne modifie rien.
Il me semble que l'itérateur est une référence sur une copie du noeud contenant le nom. Je ne fais donc que modifier une copie.

Auriez-vous une solution pour modifier l'ensemble des noms?

merci d'avance

PS s'il vous semble qu'une telle manipulation serait plus simple avec une autre librairie, je suis ouvert aux suggestions.