您的位置:首页 > 其它

glib 学习笔记,解析xml文件

2009-02-04 10:27 531 查看
转载请注明出处,或联系

fanyuanmail@126.com

xml的用处越来越广泛了,解析xml得库也非常多,总的来说分为两种,一种是把xml当作一个“树”来进行解析,一种是基于事件类型的

glib就是使用事件类型解析xml。

#include stdio.h>

gchar *current_animal_noise = NULL;

static void start(GMarkupParseContext *context,

const gchar *element_name,

const gchar **attribute_names,

const gchar **attribute_values,

gpointer user_data,

GError **error)

{

const gchar **name_cursor = attribute_names;

const gchar **value_cursor = attribute_values;

while (*name_cursor) {

if (strcmp (*name_cursor, "noise") == 0)

current_animal_noise = g_strdup (*value_cursor);

name_cursor++;

value_cursor++;

}

}

static void end(GMarkupParseContext *context,

const gchar *element_name,

gpointer user_data,

GError **error)

{

if (current_animal_noise)

{

g_free (current_animal_noise);

current_animal_noise = NULL;

}

}

static void text(GMarkupParseContext *context,

const gchar *text,

gsize text_len,

gpointer user_data,

GError **error)

{

if (current_animal_noise)

printf("I am a %*s and I go %s. Can you do it?/n",

text_len, text, current_animal_noise);

printf("test text/n");

}

GMarkupParser parser = {

.start_element = start,

.end_element = end,

.text = text,

.passthrough = NULL,

.error = NULL

};

int main()

{

char *buf;

gsize length;

GMarkupParseContext *context;

g_file_get_contents("test.xml", &buf, &length,NULL);

g_printf("%s/n",buf);

context = g_markup_parse_context_new(&parser, 0, NULL, NULL);

if (g_markup_parse_context_parse(context, buf, length, NULL) == FALSE)

{

printf("Couldn't load xml/n");

g_markup_parse_context_free(context);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: