找回密码
 注册
搜索
查看: 2381|回复: 19

[资料] mtk解析xml

[复制链接]
发表于 2009-9-4 10:33:36 | 显示全部楼层 |阅读模式
新手请教各位大虾,mtk解析xml.
发表于 2009-9-9 11:34:04 | 显示全部楼层
顶顶,我也想学习
支持
点评回复

使用道具 举报

 楼主| 发表于 2009-9-9 11:36:09 | 显示全部楼层
顶顶。我也想学习。[em01]
点评回复

使用道具 举报

发表于 2009-9-9 23:18:38 | 显示全部楼层
我也想学习呢
点评回复

使用道具 举报

发表于 2009-9-15 23:55:57 | 显示全部楼层
等待回复ing
点评回复

使用道具 举报

 楼主| 发表于 2009-9-21 12:45:50 | 显示全部楼层
ding ding  up up[em02]
点评回复

使用道具 举报

发表于 2009-9-24 09:18:46 | 显示全部楼层
等待回复ing[em01]
点评回复

使用道具 举报

发表于 2009-9-24 13:43:40 | 显示全部楼层
好象有提供现成的函数集。xml_def.h 里面,你看看吧。
点评回复

使用道具 举报

发表于 2009-12-20 15:40:41 | 显示全部楼层
顶楼上的
点评回复

使用道具 举报

发表于 2010-7-19 17:08:22 | 显示全部楼层
MTK自带的XML解析



现在大多数软件都用xml作为配置文件,MTK本身也带了XML文件的解析,在此我不评说自带XML的解析效率,我只是想说怎么简单的应用:



先给出一个简单的XML文件的内容,我们以此文件为例子来学习MTk平台怎么解析XML文件,不妨设文件名为sample.xml,其内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<l i="1" d="240x320" c="1" a="http://192.168.8.26:9090/">

      <t i="1" d="美女" c="2">

<g i="g1" n="自拍美女" c="10" e="jpg">

                 <s>289</s>

                 <s>467</s>

                 <s>773</s>

                 <s>030</s>

                 <s>264</s>

                 <s>889</s>

                 <s>245</s>

                 <s>300</s>

                 <s>175</s>

                 <s>777</s>

        </g>

<g i="g2" n="泳装美女" c="10" e="jpg">

                 <s>514</s>

                 <s>166</s>

                 <s>506</s>

                 <s>338</s>

                 <s>390</s>

                 <s>031</s>

                 <s>012</s>

                 <s>030</s>

                 <s>030</s>

                 <s>889</s>

        </g>

  </t>

</l>





MTK自带的XML解析的函数声明在xml_def.h中。其中几个关键的是:



/* external API */

extern kal_int32 xml_new_parser(XML_PARSER_STRUCT *parser);

extern void xml_close_parser(XML_PARSER_STRUCT *parser);

extern void xml_register_element_handler(

                XML_PARSER_STRUCT *parser,

                XML_start_elem_hdlr start_hdlr,

                XML_end_elem_hdlr end_hdlr);

extern void xml_register_data_handler(XML_PARSER_STRUCT *parser, XML_data_hdlr data_hdlr);



extern kal_int32 xml_parse(XML_PARSER_STRUCT *parser, kal_wchar *file_name);





几个关键的处理函数:

typedef void (*XML_start_elem_hdlr) (void *data, const kal_char *el, const kal_char **attr, kal_int32 error);

typedef void (*XML_end_elem_hdlr) (void *data, const kal_char *el, kal_int32 error);

typedef void (*XML_data_hdlr) (void *resv, const kal_char *el, const kal_char *data, kal_int32 len, kal_int32 error);



我们使用的方式如下:

         WCHAR filename[]=L”sample.xml”;

  首先定义一个XML_PARSER_STRUCT  xml_app_parser;

xml_new_parser(&xml_app_parser);

         

         //注册读取xml内容的函数,为的是将处理读出来的xml内容(默认的只是打印出来而已)

xml_register_element_handler(&xml_app_parser,xml_app_read_start_element,xml_app_read_end_element);

    xml_register_data_handler(&xml_app_parser, xml_app_read_data_element);

         

    xml_parse(&xml_app_parser,(kal_wchar*) filename);

    xml_stop_parse(&xml_app_parser);//释放用于分析的buffer等资源

    xml_close_parser(&xml_app_parser);





void xml_app_read_start_element(void *no_used, const char *el, const char **attr, S32 error)

{

}

Void xml_app_read_end_element(void *data, const kal_char *el, kal_int32 error)

{

}

Void xml_app_read_data_element(void *resv, const kal_char *el, const kal_char *data, kal_int32 len, kal_int32 error)

{

}

对于XML的解析是一行一行的解析的,对于本例来说,当注册了后,解析xml,当遇到”<”号后会调用xml_app_read_start_element,将此行的内容读到attr中,其中el=” l”,atr中是l标签的属性,其组织方式是attr[0]=”i”,attr[1]=”1”; attr[2]=”d”,attr[3]=”240x320”; attr[4]=”c”,attr[5]=”1”;attr[6]=”a”,attr[7]=” http://192.168.8.26:9090/”; 你可以在此函数里先一些对读到的信息进行保存,等等你需要的操作,其第一个参数void *no_used是没有使用的。

当读到某一行是/>时就调用用户注册的标签结束处理函数xml_app_read_end_element,其中的data没有使用,el是表示结束的标签的名称,error是错误代码,

读取内容的是xml_app_read_data_element,它被调用的时机是在<>之外的内容,例如此例中的<s>289</s>,当在>符号后有内容时便调用xml_app_read_data_element,其参数表示:第一个resv是没有使用,el仍然是表示标签的,比如此处是s,data中存储的就是字符串289,len表示data的长度。



  此处我写一个处理函数给大家参照下,比如我想读取的是l标签的a属性和第一个t标签下的第二组g下的第3个s的大小(此例是506)

则我们写出如下的函数

Char netIp30];

void xml_app_read_start_element(void *no_used, const char *el, const char **attr, S32 error)

{

         If(!strcmp(el,”a”))//标签是l

         {

                   Strcpy(netIp,attr[7]);//获取了a属性的值http://192.168.8.26:9090/

}

}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yohunl/archive/2009/04/17/4087386.aspx
点评回复

使用道具 举报

发表于 2010-7-19 21:02:28 | 显示全部楼层
看得我头晕晕的,看来进步的空间还有很大
点评回复

使用道具 举报

发表于 2010-9-2 20:21:49 | 显示全部楼层
好久没碰XML这类东西了[em10]
点评回复

使用道具 举报

发表于 2010-10-11 17:50:43 | 显示全部楼层
谢谢分享
点评回复

使用道具 举报

发表于 2010-10-17 16:04:41 | 显示全部楼层
要学习学习了
点评回复

使用道具 举报

发表于 2011-3-9 10:12:43 | 显示全部楼层
十分感谢,正在学习这方面的东西
点评回复

使用道具 举报

发表于 2011-5-30 10:32:09 | 显示全部楼层
XML...要学习学习了[em01]
点评回复

使用道具 举报

发表于 2011-6-2 18:12:01 | 显示全部楼层
谢谢好人, 谢谢好人
点评回复

使用道具 举报

发表于 2011-6-30 13:00:04 | 显示全部楼层
好东西一定要学习哦
[em02][em02]
点评回复

使用道具 举报

发表于 2013-8-29 14:34:20 | 显示全部楼层
LZ 这个东西写的好啊    永远不会过时    顶
点评回复

使用道具 举报

发表于 2013-10-22 10:26:45 | 显示全部楼层
MTK 的XML解析和其它的XML解析是没区别的~!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 11:31 , Processed in 0.050549 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表