static int parse_mystruct(char* filename, struct_data_t **mystruct) { int len; xmlChar *nodeval; xmlChar *xmlbuf; xmlDocPtr cmd; xmlNodePtr node1,child1,child2,child3,child4; if ((xmlbuf = cadv_vrfy_dump_xml_data (filename)) == NULL) return -1; len = strlen(xmlbuf); cmd = xmlParseMemory(xmlbuf, len); node1 = xmlDocGetRootElement(cmd); for (node1 = node1->children; node1; node1 = node1->next) { if(node1->type == XML_ELEMENT_NODE) { if(strcmp(node1->name,"FirstElement_underroot") == 0) { for(child1 = node1->children; child1 != NULL; child1 = child1->next) { if(strcmp(child1->name,"child1_firstelement") == 0) { for(child2 = child1->children; child2 != NULL; child2 = child2->next) { if(strcmp(child2->name,(xmlChar*)"subchild1_of_child1")==0) { nodeval = xmlNodeGetContent(child2); strcpy((*mystruct)->data1, nodeval); xmlFree(nodeval); } if(strcmp(child2->name,(xmlChar*)"subchild2_of_child1")==0) { nodeval = xmlNodeGetContent(child2); strcpy((*mystruct)->data2, nodeval); xmlFree(nodeval); } if(strcmp(child2->name,(xmlChar*)"subchild3_of_child1")==0) { for(child3 = child2->children; child3 != NULL; child3 = child3->next) { if(strcmp(child3->name,(xmlChar*)"sub_sub_child1")==0) { for(child4 = child3->children; child4 != NULL; child4 = child4->next) { if(strcmp(child4->name,(xmlChar*)"sub_sub_sub_child1")==0) { nodeval = xmlNodeGetContent(child4); strcpy((*mystruct)->data3, nodeval); xmlFree(nodeval); } } } } } } } } } } } return 1; }