嵌入式linux xml数据库,嵌入式linux对xml文件的操作(expat篇)

前段时间在项目中用到了涉及到了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 1024000

static 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!

");

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值