Symbian学习笔记(15)

今天想分享的是如何在Symbian平台上解析XML文件,不需要第三方的东西,Symbian已经为我们提供了这个类CParser。

网上也有这方面的资料,建议参考:

http://wiki.forum.nokia.com/index.php/How_to_parse_XML_file_using_CParser_class

不过,要注意的是Symbian中的CParser是基于SAX方式来解析的也就是说它是基于事件流方式,对于SAX,如果做过JAVA开发的一般不会陌生了。与DOM相比SAX方式在操作上会有点麻烦而且显得没那么好理解。

简要比较一下吧,DOM是将XML在内存中展开成一个树的模型,我们可以方便地访问它的每个子节点,可读可写。但是SAX呢?我们只能通过一个单向文本流去解析XML,在过程中有多个事件回调(开始某个元素处理、结束某个元素处理等等),它是单向只读的。

下面我们来详细说明一下如何实现吧。

首先,我们建立一个解析器派生于CActive,由它负责整个解析过程(因为这是一个异步操作)。

#include <xmlparser.h>
#include <xmlcontenthandler.h>

using namespace Xml;

class MXMLHandlerObserver
...{
public:
virtual void OnParseCompleted( TInt aError ) = 0;
};

class CXMLActiveParser : public CActive ...{
public:
~CXMLActiveParser();
static CXMLActiveParser* NewL(MXMLHandlerObserver& aObserver,MContentHandler& aHandler);
static CXMLActiveParser* NewLC(MXMLHandlerObserver& aObserver,MContentHandler& aHandler);

public:
void StartL(const TDesC& aFileName);

private:
CXMLActiveParser(MXMLHandlerObserver& aObserver,MContentHandler& aHandler);
void ConstructL();

private:
void RunL();
void DoCancel();
TInt RunError(TInt aError);

private:

CParser* iParser;
HBufC8* iBuffer;
RFile iFile;

MContentHandler *iHandler;
MXMLHandlerObserver *iObserver;

RFs iFs;
};

时间: 2024-10-22 01:31:01

Symbian学习笔记(15)的相关文章

Symbian学习笔记

Symbian学习笔记(22) - 关于皮肤的小结 Symbian学习笔记(21)--原来还有这个工具wsdl2cpp,访问webserv Symbian学习笔记(20)--用gSOAP更简单地实现Web Services Clien Symbian学习笔记(19)--初探WebServices API的使用(下) Symbian学习笔记(18)--初探WebServices API的使用(中) Symbian学习笔记(17)--初探WebServices API的使用(上) Symbian学习

API Demos 2.3 学习笔记 (15)-- Views-&amp;gt;Radio Group

更多精彩内容,请点击阅读:<API Demos 2.3 学习笔记> 想想我们上学时候做的单项选择题,其中只有一个是正确答案.在做题的时候,我们只能选择一项.如果我们想在Android上设计一道单项选择题的话,可能就要用到RadioGroup了.RadioGroup常常和RadioButton一起使用.由一个RadioGroup包含若干个RadioButton,组成一个单项选择群组.我们在同一时间只能选中该组中的一个 RadioButton. RadioGroup的创建主要有两种方法: 1.在x

Symbian学习笔记(17)——初探WebServices API的使用(上)

很久没有学习Symbian了,今天研究一下如何使用Symbian中提供的WebService框架来SayHello. 从SDK文档中提供的资料来看这个接口似乎有点复杂,包括了Connection API.Description API和Manager API三套东西,此外还涉到了XML的解析之类的一些API的应用. 阅读了一下它的例子程序(S60Ex目录下的AddressBook),让我更晕乎了.怎么跟自己平时使用的WebService不一样了? 在SDK文档中关于CSenServiceConn

Symbian学习笔记(5)——加载JPEG图像的方法

上次学习的是从MIF和MBM文件中加载图像,一般在程序中出现的图片都可以用这个方法,但有一点点遗憾,它只能使用svg或bmp格式,BREW或J2ME中的资源却多为png格式的. 如果想在symbian中使用jpg或者png图片,则需要用到symbian提供的那个Multimedia ICL库里的类了.其中比较重的是CImageDecoder类,提供了对图像进行解码的功能. 来看看如何使用它的吧.先定义两个字串: _LIT(KJPEGFile,"C:\\Data\\me.jpg"); _

Symbian学习笔记(4)——在GUI应用中使用图像

学习一下如何修改GUI程序中的图标与如何加载图像. 与2nd.不同的是,3rd.支持svg格式的可缩放图标(最大好处在于一个图标搞定,以前用bmp时为了应用程序的菜单图标得要做四个小图标).而且,现在有了一种新的图像打包格式mif(这名字咋跟BREW中那个MIF一样啊).虽然还支持以前的MBM方式但是不建议使用了. 要在应用程序中增加图像图标资源,过程如下: 第一步,先将要加入的图像放在工程的/gfx目录下,如: qgn_menu_DemoUI.svg splash2.bmp 前面一个就是应用程

Symbian学习笔记(2)——基本概念

第一次打开SymbianC++的程序源代码,第一感觉就是"这是C/C++吗?咋这么眼生啊". 看代码看书,才算是稍稍明白了一点,其实无非就是typedef罢了,symbian可比brew定义了更多的东西. 这是以后干活的基础,所以做个笔记,省得忘了. 一.基本数据类型 这个比较简单,都在e32def.h中写着呢.也就是以下这几个类型要注意一下,以后照着写罢了,含义也很明了,不用多说. typedef void TAny; typedef signed char TInt8; typed

Symbian学习笔记(21)——原来还有这个工具wsdl2cpp,访问webservice也很简单

在论坛里看到有人问使用wsdl2cpp生成代码,才知道原来symbian提供了一个辅助工具来生成webservice client的代码,比起我上回折腾的自己参考AddressBook例子做的webservice客户端要简单多了,类似于gSOAP的使用. 首先,去forum.nokia.com.cn搜一下WSDL-to-C++_for_S60,这是用于Carbice Vs的工具,不过也可以独立安装,用命令行来生成所需要的代码.下载安装即可. 第二步,运行它的wsdl2cpp工具,得到一些源代码,

Symbian学习笔记(20)——用gSOAP更简单地实现Web Services Client

昨天折腾了一下那个gSOAP,发现这东西比Symbian自带的WebServiceAPI更简单方便,推荐使用! gSOAP的官方网站是:http://gsoap2.sourceforge.net/ 具体使用方法不多说,因为网上GOOGLE 一下很多资料.下面只对在symbian环境下使用略说几点. 我下载的是最新版的v2.7.10,下载的压缩包里就有一个symbian目录,里面是在symbian的例子,可以参考. 试着做了一个HelloWorld,还是访问前面做的那个web service,按照

Symbian学习笔记(19)——初探WebServices API的使用(下)

继续,看看如何取出结果值,就是<HelloWorldResult>Hello World</HelloWorldResult>中的字串HelloWorld,这个代码在CHelloWorldResult中: view plaincopy to clipboardprint? TPtrC8CHelloWorldResult::Result() { CSenElement*pElement=AsElement().Element(KHelloResult); if(pElement) {