arm linux xml解析,在arm嵌入式linux下解析XML文件

是设置处理元素头尾的函数.

XML_SetCharacterDataHandler(XML_Parser p,XML_CharacterDataHandler charhndl)

设置元素内文本的处理函数.void XML_SetUserData(XML_Parser p,void *userData);

设置一个共享的数据结构给各各处理函数使用.XML_Status XML_Parse(XML_Parser p,const char *s,int len,int isFinal);

这个是主处理函数.通过给XML_Parse对象指定一个含有xml文本的char型数组s,来解析xml.解析的过程就是在读到某个位置就调用的处理函数来处理.比如读到元素的头部,就调用在XML_SetElementHandler中设定的start函数来处理.

上面描述的有些空洞,看个例子就全明白了:

要解析这样一个XML:

a greate guy!

显示其中的attr和content,程序如下:

void starthandle(void *userdata, const char *el, const char **attr)

{

//解析时对xml元素头的解析函数

int i;

for (i=0;attr[i];i+=2)

{

printf("%s=%s",attr[i],attr[i+1]);

}

}

void endhandle(void *data, const char *el)

{

//什么也不做.

}

void chardatahandle(void *data,char *s,int len)

{

//显示content的内容.注意s不是以空作为字符串结尾的标识.要手动用len来控制.

}

int ReadXml(char *xmlbuf,int bufsize)

{

XML_Parser g_Parser=XML_ParserCreate(NULL);

XML_SetElementHandler(g_Parser, starthandle,endhandle);

XML_SetCharacterDataHandler(g_Parse,chardatahandle);

if (! XML_Parse(g_Parser, xmlbuf, bufsize, 1))

{

fprintf(stderr, "Parse error at line %d:/n%s/n",

XML_GetCurrentLineNumber(g_Parser),

XML_ErrorString(XML_GetErrorCode(g_Parser)));

return -1;

}

XML_ParserFree(g_Parser);return 0;

}//程序大概就是这样,但是没有调试,不能保证正确:)

上边就是整个处理程序,是要调用readXML,传入xml的buf就可以解析了.基本上所有expat程序的框架都是这个样子,稍作改动就可以用在自己的程序里.

以上就是我对xml解析的一点点总结,能力有限,如果有什么地方有错误,还请大家多多指点.欢迎大家和我交流.我的email:ifqqfi@gmail.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值