efl/src/examples/eina/eina_simple_xml_parser_02.c

74 lines
1.6 KiB
C

//Compile with:
//gcc -Wall -o eina_simple_xml_parser_02 eina_simple_xml_parser_02.c `pkg-config --cflags --libs eina`
#include <Eina.h>
#include <stdio.h>
#include <string.h>
static Eina_Bool
_xml_attribute_parse_cb(void *data EINA_UNUSED, const char *key, const char *value)
{
printf("attributes, key = %s, value = %s\n", key, value);
return EINA_TRUE;
}
static Eina_Bool
_xml_tag_parse_cb(void *data EINA_UNUSED, Eina_Simple_XML_Type type, const char *content,
unsigned offset EINA_UNUSED, unsigned int length)
{
if (length == 0) return EINA_FALSE;
if (type == EINA_SIMPLE_XML_OPEN)
{
//Print tag
if (!strncmp("Group", content, strlen("Group")))
printf("tag = Group\n");
else if (!strncmp("Label", content, strlen("Label")))
printf("tag = Label\n");
//Print attributes
const char *tags = eina_simple_xml_tag_attributes_find(content, length);
eina_simple_xml_attributes_parse(tags, length - (tags - content),
_xml_attribute_parse_cb, NULL);
}
return EINA_TRUE;
}
int
main(void)
{
FILE *file;
long size;
eina_init();
//1. Open XML File
file = fopen("exia.xml", "rb");
if (!file) return 0;
fseek(file, 0, SEEK_END);
size = ftell(file);
fseek(file, 0, SEEK_SET);
//2. Read XML File
char *buffer = malloc(size);
if (!buffer)
{
fclose(file);
return 0;
}
fread(buffer, 1, size, file);
//3. Start Parsing XML
eina_simple_xml_parse(buffer, size, EINA_FALSE, _xml_tag_parse_cb, NULL);
fclose(file);
free(buffer);
return 0;
}