xml解析及编译汇总

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <libxml/xmlmemory.h> 
#include <libxml/parser.h>
#include <libxml/tree.h>


void 
get_connnectrequestUrl(char *docname) { 
	xmlDocPtr doc; 
	xmlNodePtr cur; 
	doc = xmlParseFile(docname); 
	if (doc == NULL ) { 
		printf("Document not parsed successfully. \n"); 
		return; 
	} 
	cur = xmlDocGetRootElement(doc); 
	if (cur == NULL) { 
		printf("empty document\n"); 
		xmlFreeDoc(doc); 
		return; 
	} 
	if (xmlStrcmp(cur->name, (const xmlChar *) "Context")) { 
		printf("document of the wrong type, root node != Context"); 
		xmlFreeDoc(doc); 
		return; 
	} 
	cur = cur->xmlChildrenNode; 

	while (cur != NULL){
		xmlNodePtr cur2_tmp = cur;
	    xmlChar *key;
		xmlChar *attr;
		char connectrequestUrl[32];
		if ((!xmlStrcmp(cur->name, (const xmlChar *)"list"))){
			attr = xmlNodeListGetString(doc, cur->properties->xmlChildrenNode, 1);
			if((!xmlStrcmp(attr,  (const xmlChar *)"rrm_cell"))){
				xmlFree(attr);
				cur = cur->xmlChildrenNode;
				while(cur != NULL){
					xmlNodePtr cur2_tmp = cur;
					if ((!xmlStrcmp(cur->name, (const xmlChar *)"item"))){
						attr = xmlNodeListGetString(doc, cur->properties->xmlChildrenNode, 1);
						if((!xmlStrcmp(attr,  (const xmlChar *)"Cell_Map_s"))){
							xmlFree(attr);
							cur = cur->xmlChildrenNode;
							while(cur != NULL){
								xmlNodePtr cur2_tmp = cur;
								if ((!xmlStrcmp(cur->name, (const xmlChar *)"p"))){
									attr = xmlNodeListGetString(doc, cur->properties->xmlChildrenNode, 1);
									if((!xmlStrcmp(attr,  (const xmlChar *)"Hnb_IP"))){
										xmlFree(attr);
										printf("********************\n");
										key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
										memcpy(connectrequestUrl,(const char *)key,strlen((const char *)key));
										connectrequestUrl[strlen((const char *)key)]='\0';
				                        printf("the url is:%s\n",connectrequestUrl);

										xmlFree(key);
										}
									else{
										xmlFree(attr);
										}
									}

								/*reset cul*/
								cur = cur2_tmp;
					            cur = cur -> next;
								}
							}
						else{
							xmlFree(attr);
							}
						
						}
						



					/*RESET cur*/
					cur = cur2_tmp;
					cur = cur -> next;
					}
				
				}
			else{
				xmlFree(attr);
				}
			
			
			}
		cur = cur2_tmp;
		cur = cur -> next;
    	}
        xmlFreeDoc(doc);

		}


		int main(void){
			while(1){
			get_connnectrequestUrl("config.xml");
			sleep(5);
			//return 0;
		}
		}
		


编译:gcc -o testxml4 testxml4.c -I /usr/local/include/libxml2/ -L /usr/local/lib -lxml2

使用valgrind检测内存泄露的情况:valgrind --tool=memcheck --leak-check=full ./testxml4

交叉编译: arm-none-linux-gnueabi-gcc -o testxml4 testxml4.c -I /usr/local/include/libxml2/ -L /usr/local/lib -lxml2



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值