嵌入式linux对xml文件的操作(expat篇)
来源:互联网 发布:java并发编程的好书 编辑:程序博客网 时间:2024/06/05 09:31
前段时间在项目中用到了涉及到了xml文件的解析,环境是嵌入式linux,在此简单总结一下留个记录,也跟大家分享一下。
我在项目中用的是expat解析库,还有很多其它的库可以使用,比如libxml、minixml等,它们之间有些差别,下面是从网上粘来的说法。
目前的xml解析器一般有两种解析的形式.一种是DOM模型的,一种是SAX2模型的.DOM模型是讲xml文件中的结构解析成一棵树,然后再进行各种操作;而SAX2模型是类似与事件处理的方式从头到位解析xml文件.两种方式各有优劣,不过在嵌入式设备上用DOM模型的解析器似乎太耗内存,所以一般都用SAX2的解析器。
expat就是SAX2模型的解析器,下面简单说说安装和使用方法:
1.下载、解压expat库(网上资源很多,自己搜)
2.执行configure文件和make install、make,注意执行 configure时要把编译指令改为交叉编译指令(交叉编译指令视情况而定)如下:
./configure CC=arm-linux-gcc --host=arm-linux --prefix=$PWD/_install
3.使用方法:
expat库要包含的头文件是expat.h,如果是集成开发环境,如eclipse,需要包含动态库或者静态库(libexpat.a,libexpat.so)的路径,
expat要使用的函数有4个:
XML_ParserCreate()
XML_SetUserData()
XML_SetElementHandler()
XML_ParserFree()
粘一段代码
#include "readconfig.h"#include "expat.h"#define MAX_XML_CONFIG_FILE_SIZE 1024000static Shm_Data_Cache *config_shm_data_cache = NULL;static NAYU_INT32 g_channel_offset = 0;static NAYU_INT32 g_device_offset = 0;static NAYU_INT32 g_iopoint_offset = 0;void startElement(void *userData, const char *name, const char **atts){
/*这个函数中name就是属性名,*atts[奇数]是字段名,*atts[偶数]是字段值*/}void endElement(void *userData, const char *name){ /*这个函数中判断name的结尾并做出相应的处理*/}int Get_Total_Config(Shm_Data_Cache * shm)//自定义函数{config_shm_data_cache = shm;NAYU_INT8 buf[MAX_XML_CONFIG_FILE_SIZE];XML_Parser parser = XML_ParserCreate(NULL);NAYU_INT32 depth = 0;FILE* pf = fopen("/home/nayu/config/db.xml","r");if(pf == NULL){printf("Open xml file error!\n");return -1;}XML_SetUserData(parser, &depth);XML_SetElementHandler(parser, startElement, endElement);size_t len = 0;do{len = fread(buf, 1, sizeof(buf), pf);XML_Parse(parser, buf, len, 1);}while(len>0);XML_ParserFree(parser);fclose(pf);return 0;}
- 嵌入式linux对xml文件的操作(expat篇)
- Linux XML expat 笔记
- 对 Xml 文件的操作
- 对XMl文件的操作
- PHP 使用 XML Expat 解释xml文件
- 用expat解析包解析XML文件
- 用expat解析XML文件小结
- xml expat
- .NET中对XML文件的操作资料(未完)
- C#对XML文件的操作
- 对XML文件的基本操作
- Asp.Net对Xml文件的操作
- Asp.Net对Xml文件的操作
- Asp.Net对Xml文件的操作
- 对XML文件的基本操作
- ASP.net 对XML文件的操作
- jdom对xml文件的读写操作
- C#对XML文件的操作
- COM特性 包容和聚合
- 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是
- 风险投资专用术语
- 指南选择最佳的振动器,以加强乐趣
- 整理:linux kernel firmware update 内核设备固件升级方法
- 嵌入式linux对xml文件的操作(expat篇)
- vim程序编辑器-练习题
- 索引原理2
- 彩票历史数据入库
- 跟我一起学extjs5(14--模块字段和Grid列的定义[1])
- iOS根据坐标数据点所在的坐标区域来动态显示到可视范围
- iReport文本不换行
- 对象排序Comparator与Comparable
- Linux设备模型--驱动