2 //gcc -Wall -o eina_simple_xml_01 eina_simple_xml_01.c `pkg-config --cflags --libs eina`
8 static Eina_Bool _xml_attr_cb(void *data, const char *key, const char *value);
9 static Eina_Bool _xml_tag_cb(void *data, Eina_Simple_XML_Type type,
10 const char *content, unsigned offset, unsigned length);
11 static Eina_Bool _print(const void *container, void *data, void *fdata);
13 Eina_Bool tag_login = EINA_FALSE;
14 Eina_Bool tag_message = EINA_FALSE;
26 if ((file = fopen("chat.xml", "rb")))
28 fseek(file, 0, SEEK_END);
30 fseek(file, 0, SEEK_SET);
32 if ((buffer = malloc(size)))
34 fread(buffer, 1, size, file);
36 array = eina_array_new(10);
37 eina_simple_xml_parse(buffer, size, EINA_TRUE,
40 eina_array_foreach(array, _print, NULL);
42 eina_array_free(array);
47 EINA_LOG_ERR("Can't allocate memory!");
53 EINA_LOG_ERR("Can't open chat.xml!");
61 _xml_tag_cb(void *data, Eina_Simple_XML_Type type, const char *content,
62 unsigned offset, unsigned length)
64 char buffer[length+1];
65 Eina_Array *array = data;
68 if (type == EINA_SIMPLE_XML_OPEN)
70 if(!strncmp("post", content, strlen("post")))
72 const char *tags = eina_simple_xml_tag_attributes_find(content,
74 eina_simple_xml_attributes_parse(tags, length - (tags - content),
77 else if (!strncmp("login>", content, strlen("login>")))
79 tag_login = EINA_TRUE;
81 else if (!strncmp("message>", content, strlen("message>")))
83 tag_message = EINA_TRUE;
86 else if (type == EINA_SIMPLE_XML_DATA)
88 if (tag_login == EINA_TRUE)
90 snprintf(buffer, sizeof(buffer), content);
92 strncat(str, buffer, sizeof(buffer));
93 strncat(str, "> ", 2);
94 tag_login = EINA_FALSE;
96 else if (tag_message == EINA_TRUE)
98 snprintf(buffer, sizeof(buffer), content);
99 strncat(str, buffer, sizeof(buffer));
100 tag_message = EINA_FALSE;
101 eina_array_push(array, strdup(str));
109 _xml_attr_cb(void *data, const char *key, const char *value)
113 if(!strcmp("id", key))
115 snprintf(str, sizeof(value) + 3, "(%s) ", value);
122 _print(const void *container, void *data, void *fdata)
124 printf("%s\n", (char *)data);