bonjour,
j'aimerais parser un fichier xml pour recuprer les données dont j'en ai besoin.
je veux utiliser la glib etant donné que je l'utilises deja pour autre chose donc je prefere pas utiliser la libxml2.
mais le probleme c'est que je trouve un peu de difficulté à l'utiliser.
pour le moment j'arrive à afficher les tags ainsi que le contenu des tags <tag> contenu </tag>.
mais le probleme c'est que chaque callback gere quelque chose je vois pas comment faire.
voila le code il marche.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
#include <glib.h>
#include <stdio.h>
 
void xml_start_element_handler   (
                                    GMarkupParseContext *context,
                                    const gchar               *element_name,
                                    const gchar             **attribute_names,
                                    const gchar             **attribute_values,
                                    gpointer                   user_data,
                                    GError                   **error)
{
  g_print("- tag ouvert = %s\n", element_name);
  guint i=0;
  while(attribute_names[i] != NULL)
  {
    g_print(" attr %s = %s \n", attribute_names[i], attribute_values[i]);
    ++i;
  }
}
 
void xml_end_element_handler   (
         GMarkupParseContext *context,
                                    const gchar               *element_name,
                                    gpointer                   user_data,
                                    GError                   **error)
{
     g_print("-- tag fermé = %s\n", element_name);
}
 
void text           (GMarkupParseContext *context,
                          const gchar         *text,
                          gsize                text_len,  
                          gpointer             user_data,
                          GError             **error)
{
 			  g_print(" '''''' txt = %s\n", text);																							
}
 
 
void xml_error_handler(   GMarkupParseContext *context,GError *error, gpointer user_data)
{
   fprintf (stderr, " %s\n", error->message);
}
 
gboolean create_xml(const gchar *filename)
{
   gchar *contents = NULL;
   gsize  length;
   GError *error=NULL;
   GMarkupParseContext *context;
 
   GMarkupParser parser;
 
   parser.start_element = xml_start_element_handler;
   parser.end_element = xml_end_element_handler;
   parser.text = text;
   parser.passthrough = NULL;
   parser.error = xml_error_handler;
 
   if (!g_file_get_contents (filename, &contents, &length, &error))
   {
      fprintf (stderr, "%s\n", error->message);
      g_error_free (error);
      return FALSE;
   }
 
   context = g_markup_parse_context_new (&parser, (GMarkupParseFlags)0, NULL, NULL);
 
   if (!g_markup_parse_context_parse (context, contents, length, NULL))
   {
      g_markup_parse_context_free (context);
      return FALSE;
   }
 
   if (!g_markup_parse_context_end_parse (context, NULL))
   {
      g_markup_parse_context_free (context);
      return FALSE;
   }
 
   g_markup_parse_context_free (context);
 
   return TRUE;
}
 
int main()
{
 		gchar *p_filename= g_strdup ("fichier.xml");
 		create_xml (p_filename);
 		return(0);
}
mon fichier est de la sorte:
<fichier>
<post>
<auteur> </auteur>
<titre> </titre>
<description> </description>
</post>

<post>
<auteur> </auteur>
<titre> </titre>
<description> </description>
</post>

</fichier>
j'espere que quelqu'un va m'aider.
++