diff --git a/unsorted/eina/eina_simple_xml_parser_02.c b/unsorted/eina/eina_simple_xml_parser_02.c new file mode 100644 index 00000000..0d8269a8 --- /dev/null +++ b/unsorted/eina/eina_simple_xml_parser_02.c @@ -0,0 +1,73 @@ +//Compile with: +//gcc -Wall -o eina_simple_xml_parser_02 eina_simple_xml_parser_02.c `pkg-config --cflags --libs eina` + +#include +#include +#include + + +static Eina_Bool +_xml_attribute_parse_cb(void *data, 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_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; +} diff --git a/unsorted/eina/exia.xml b/unsorted/eina/exia.xml new file mode 100644 index 00000000..f5ae55bd --- /dev/null +++ b/unsorted/eina/exia.xml @@ -0,0 +1,5 @@ + + + +