My C xmlretrive函数(thisurl,thisxpath)使用cURL从给定的URL检索XML,并将获得的chunk.memory发送到libxml2解析器,该解析器使用xpath浏览所有节点并匹配thisxpath表达式(基本上从某些节点属性返回一些文本) 。 这很困难(我是一名初学者程序员),但是经过几天的工作,在这个论坛上的一些搜索和堆栈社区的一些帮助我得到了我的代码。令人惊讶......但是......但是现在我正面临着我的最后一个问题(我真的认为这会更容易)。
我的数据在xmlretrive中,好的,但是如何将该信息传递回main函数? 用结果填充一个字符串数组然后从main(和最后一个释放内存)访问该数组是一个很好的行为?我怎么能做到这一点?或者还有其他“标准/安全”程序吗?我已经读过,不可能“返回”一个数组。一些帮助将非常感激,因为实际上我只能在屏幕上打印结果(当然在xmlretrive函数内):\
最佳, 乔瓦尼。
int main(void) {
char thisxpath[200];
char thisurl[200];
strcpy (thisurl,"http://api.openweathermap.org/data/2.5/forecast/daily?q=Pescara&mode=xml&units=metric&cnt=3");
strcpy (thisxpath,"//time/@day | //symbol/@name | //windSpeed/@name | //temperature/@*[name()='day' or name()='min']");
xmlretrive (thisurl, thisxpath);
return 0;
}
void xmlretrive(char* myurl, char* myxpath) {
//code, code, a lot of code
for (i=0; i < nodeset->nodeNr; i++) {
keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
printf("keyword: %s\n", keyword);
// Need to get keyword values back to main//
xmlFree(keyword);}
//code
}
答案 0 :(得分:0)
将keywords
复制到链接列表并将其返回到main。这样您就可以在main中迭代并打印它们。
此外,您不必事先知道关键字列表的大小。确保复制关键字字符串libxml返回到链表节点并xmlFree
释放它以避免内存管理问题。
答案 1 :(得分:0)
使用指针。像这样:
int main(void) {
char thisxpath[200];
char thisurl[200];
strcpy (thisurl,"http://api.openweathermap.org/data/2.5/forecast/daily?q=Pescara&mode=xml&units=metric&cnt=3");
strcpy (thisxpath,"//time/@day | //symbol/@name | //windSpeed/@name | //temperature/@* [name()='day' or name()='min']");
char** plop = NULL;
xmlretrive (thisurl, thisxpath, &plop);
return 0;
}
void xmlretrive(char* myurl, char* myxpath, char*** plop) {
//code, code, a lot of code
for (i=0; i < nodeset->nodeNr; i++) {
keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
printf("keyword: %s\n", keyword);
/* Malloc plop and initialize it as you want*/
xmlFree(keyword);}
//code
}
它有点难看,但它比全局变量更好。