Bonjour à tous,

Dans le cadre d'un projet réalisé avec wxWidgets, je voulais gérer les paramètres de mon application dans un fichier xml. wxWidgets ne proposant pas encore de parser (ils déconseillent d'utiliser wxXML), j'ai essayé d'adopter tinyxml.

Tout avait l'air de fonctionner jusqu'à ce que je mette des accents dans la valeur des attributs... et là, c'est la cata...

Voici un exemple complet et minimal de code qui expose mon 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "tinyxml.h"
#include <iostream>
 
int main()
{
    TiXmlDocument * Doc;
    Doc = new TiXmlDocument();
 
    if(!Doc->LoadFile("test.xml"))
    {
        std::cerr << "Impossible de charger le fichier" << std::endl;
        delete Doc;
        return EXIT_FAILURE;
    }
 
    TiXmlHandle Handle(Doc);
    TiXmlElement * Elt = Handle.FirstChild( "test" ).FirstChild( "noeud" ).Element();
    if(!Elt)
    {
        std::cerr << "Elément noeud non trouvé" << std::endl;
        delete Doc;
        return EXIT_FAILURE;
    }
 
    std::cout << "valeur avant modif : " << Elt->Attribute("valeur") << std::endl;
 
    Elt->SetAttribute("valeur", "testé");
    Doc->SaveFile();
 
    delete Doc;
 
    Doc = new TiXmlDocument();
 
    if(!Doc->LoadFile("test.xml"))
    {
        std::cerr << "Impossible de charger le fichier après modification !" << std::endl;
        delete Doc;
        return EXIT_FAILURE;
    }
 
    Elt = Handle.FirstChild( "test" ).FirstChild( "noeud" ).Element();
    if(!Elt)
    {
        std::cerr << "Elément noeud non trouvé" << std::endl;
        delete Doc;
        return EXIT_FAILURE;
    }
 
    std::cout << "valeur apres modif : " << Elt->Attribute("valeur") << std::endl;
 
    return EXIT_SUCCESS;
}
Avant de l'exécuter, il faut placer le fichier "test.xml" dans le répertoire d'exécution, avec pour contenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<?xml version="1.0" encoding="UTF-8" ?>
<test>
    <noeud valeur="test" />
</test>
Et après avoir essayé de changer "test" par "testé", tinyXML n'arrive plus à lire le fichier. Et pour cause, il n'est plus conforme !

Est-ce que j'ai fait des erreurs dans mon code ?
Ou est-ce qu'il s'agit d'une erreur de tinyXML (j'ai plutôt tendance à le penser, étant donné que le fichier créé avec tinyXML n'est pas conforme !) ?

Merci d'avance pour vos réponses !