/*
<ROOT>
<CHILD id="attribute" value="1" />
<CHILD id="attribute" value="1" />
</ROOT>
compile:
// g++ filename.cpp -o exefilename `xml2-config --cflags --libs`
*/
// xml parsing example
// Reading element from xml file
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void getReference (xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *uri;
xmlChar *value;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"setting"))) {
uri = xmlGetProp(cur,(const xmlChar*) "id");
value = xmlGetProp(cur,(const xmlChar*) "value");
printf("uri: %s, value:%s\n", uri,value);
xmlFree(uri);
}
cur = cur->next;
}
return;
}
void parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(cur->name, (const xmlChar *) "settings")) {
//fprintf(stderr,"document of the wrong type, root node != story", xmlFreeDoc(doc));
printf("root error\n");
return;
}
getReference (doc, cur);
xmlFreeDoc(doc);
return;
}
int main(int argc, char **argv) {
char *docname;
if (argc <= 1) {
printf("Usage: %s docname\n", argv[0]);
return(0);
}
docname = argv[1];
parseDoc (docname);
return (1);
}