VS C语言xml文件读取

前端之家收集整理的这篇文章主要介绍了VS C语言xml文件读取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近需要把算法转成C语言,C语言没怎么用过,就大学公共课学过,好久了,忘得差不多了。感觉自己高级语言用的很熟,所以C语言看了点基础就开始转,然后遇到了一个坑,摔死我了。不说废话,进入主题。(以下是思想过程)

调用别人的第三方库,生成xml类型字符串,我需要进行解析。其实挺简单的,对于linux系统来说,使用libxml就可以轻松搞定。问题是,我是win10,然后就上网查呀,又得下载libxml包,又缺libiconv,后者还没有win,得自己编译一个win版的。真正编译完后,又告诉你缺少zlib1.dll包,我不知道我是怎么坚持下来的。心想妈蛋,大不了不用三方解析包,我整个正则也能搞定。然后一查,这个C还没个什么标准,说这个标准有regex.h,说那个标准没有,卧槽,我是不了解C,我反正用的是Virsual studio.这两条路都给我都堵死了,那没办法了,我就不信用指针用最原始的办法还搞不定(说实话,C语言对于字符串截取这里做的真是太差了,高级语言用惯了,底层的语言用起来真是麻烦)。所以写了个简易版的解析,我就按公司的业务,走了三级标签:<root><confidence></confidence><result><confidence>.....这个层级关系.


/*
	第一个参数是要分析的xml格式字符串。
	第二个参数是你不得不定位的节点,正如上面说的,要哪个节点下面的子节点
	第三个参数是你要的内容左侧的节点<confidence>
	同上,不过是右侧</confidence>
*/
void  getElement(char* origin_str,char* root_elm,char* target_elm_start,char* target_elm_end) {
	const char* result = origin_str;
	const int origin_len = strlen(origin_str);
	int* final_result;

	while ((result = strstr(result,root_elm)) != NULL) {
		int c1_len = 0;
		int c2_len = 0;
		char* con1 = result;
		while ((con1 = strstr(con1,target_elm_start)) != NULL) {
			c1_len = strlen(con1);
			char* con2 = con1;
			while ((con2 = strstr(con2,target_elm_end)) != NULL) {
				c2_len = strlen(con2);
				final_result = (int*)calloc(c1_len - c2_len,sizeof(int));
				break;
			}
			strncpy(final_result,con1 + strlen(target_elm_start),c1_len - c2_len - strlen(target_elm_start));
			final_result[strlen(final_result)] = '\0';
			break;
		}
		break;
	}
	printf("%s\n",final_result);
}
程序很简单,不过用win真的很糟心,还没办法,很多公司开发出来的工具包都是VS开发的,你要是换的话得各种改,烦,留个教训吧,希望能帮到遇到这种情况的朋友,至少不用去下载和安装什么第三方的破包。

猜你在找的XML相关文章