bonjour à tous,

voila j'ai une fonctio qui créer un document XML à la maniere rustique puis ajoute différents noeud grace à libxml.

Cette fonction marche mais j'ai un petit souci.

Quand je cré mon document XML et que je le manipule greâce à libxml j'utilise le noeud racine "racine". Avec l'utilisation de libxml il est conseillé de libérer tout les noeud utiliser. Je veux donc faire xmlFreeNode(racine) mais sur cetet ligne il me sors une violation acces error sur la dll libxml2. puis ca fait bugger tout le programme.

Comme je l'ai dis si j'enleve cette ligne le programme marche mais bon j'aimerais qu'il marche et qu'il soit correct.

voila merci.

si vous avez d'aute remarque sur le code n'hesitez pas, je suis un novice de la programmation.

Cordialement

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
53
54
 
int result = ERREUR_CREATION_FICHIER;
   xmlDocPtr fichierXML;
   xmlNodePtr racine;

   SaveDialog1 = new TSaveDialog(this->mpXMLOwner);
   SaveDialog1->Filter = XML_FILTRE;
   SaveDialog1->DefaultExt = EXT_FICHIER;
   if(SaveDialog1->Execute())
   {
     HANDLE HFile;
     if ( (HFile = CreateFile(SaveDialog1->FileName.c_str(),GENERIC_WRITE,FILE_SHARE_READ, NULL,CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
     {
        CloseHandle(HFile);
        mpContenu = new TStringList;
        mpContenu->Add(ENCODAGE_XML);
        mpContenu->Add(RACINE_XML);
        mpContenu->SaveToFile(SaveDialog1->FileName);
        delete mpContenu;
        // Ouverture du fichier XML
        fichierXML = xmlParseFile(SaveDialog1->FileName.c_str());
        if (fichierXML == NULL)
        {
          result = FICHIER_XML_INVALIDE;
        }
        else
        {
          // Récupération de la racine
          racine = xmlDocGetRootElement(fichierXML);
          if (racine == NULL)
          {
            result = FICHIER_XML_VIERGE;
            xmlFreeDoc(fichierXML);
          }
          else
          {
             xmlNewChild(racine, NULL, "composants", "");
             xmlNewChild(racine, NULL, "variantes", "");
             xmlNewChild(racine, NULL, "versions", "");
             xmlNewChild(racine, NULL, "nomenclatures", "");
             xmlSaveFile(SaveDialog1->FileName.c_str(), fichierXML);
             xmlFreeNode(racine);
             xmlFreeDoc(fichierXML);
             result = FICHIER_CREE;
          }
        }
     }
     else
     {
        result = FICHIER_EXISTANT;
     }
   }
   delete SaveDialog1;
   return result;