`
yesjavame
  • 浏览: 687211 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Symbian学习笔记(15) - 解析XML文件(上)

阅读更多
我曾在前面介绍过一个可用于BREW环境下的XML Parser,今天想分享的是如何在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>

usingnamespaceXml;

classMXMLHandlerObserver
...{
public:
virtualvoidOnParseCompleted(TIntaError)=0;
}
;

classCXMLActiveParser:publicCActive...{
public:
~CXMLActiveParser();
staticCXMLActiveParser*NewL(MXMLHandlerObserver&aObserver,MContentHandler&aHandler);
staticCXMLActiveParser*NewLC(MXMLHandlerObserver&aObserver,MContentHandler&aHandler);

public:
voidStartL(constTDesC&aFileName);

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

private:
voidRunL();
voidDoCancel();
TIntRunError(TIntaError);

private:

CParser
*iParser;
HBufC8
*iBuffer;
RFileiFile;

MContentHandler
*iHandler;
MXMLHandlerObserver
*iObserver;

RFsiFs;
}
;

除了CActive所必需的东西以外,我们增加了 iParser 成员负责解析,iBuffer保存文件内容以供给iParser去解析,而iHandler是SAX所特有的回调处理类(后面详述),iObserver则是自定义的一个接口,其实是一个Notifer,就是在解析完成后调用它的OnParseCompleted方法。

实现的部分主要功能在Construct、Start和Run三个函数中:
voidCXMLActiveParser::ConstructL()...{
CActiveScheduler::Add(
this);//Addtoscheduler
iParser=CParser::NewL(KXmlMimeType,*iHandler);
iFs.Connect();
}


voidCXMLActiveParser::StartL(constTDesC&aFileName)...{
Cancel();

User::LeaveIfError(iFile.Open(
/**//*CCoeEnv::Static()->FsSession()*/iFs,aFileName,
EFileRead));
deleteiBuffer;
iBuffer
=0;

iBuffer
=HBufC8::NewL(KFileBufferSize);
TPtr8bufferPtr(iBuffer
->Des());
iFile.Read(bufferPtr,KFileBufferSize,iStatus);
SetActive();

iParser
->ParseBeginL();
}


voidCXMLActiveParser::RunL()...{
if(KErrNone==iStatus.Int())...{
if(iBuffer->Length()==0)...{
iParser
->ParseEndL();
iFile.Close();
deleteiBuffer;
iBuffer
=0;

iObserver
->OnParseCompleted(KErrNone);
}

else...{
iParser
->ParseL(*iBuffer);
TPtr8bufferPtr(iBuffer
->Des());
iFile.Read(bufferPtr,KFileBufferSize,iStatus);
SetActive();
}

}

else...{
//errorhandler.
iObserver->OnParseCompleted(iStatus.Int());
}

}

注意CParser在NewL时告诉它文档类型是 _LIT8( KXmlMimeType, "text/xml" ) ,以及它需要的回调处理器是iHandler。然后在StartL时读入XML文件,准备解析。在RunL中如果未完成则开始解析,真到完成后则调用iObserver的onParseCompleted通知观察者“我处理完了,请拿走结果吧”。

分享到:
评论

相关推荐

    SyExpat--xml解析的开源项目源码(symbian)

    xml解析的开源项目源码(symbian),在S60 2nd和3rd,以及UIQ上编译通过并能在模拟器和真机上正常运行~~ 警告:此项目中的源码部分没问题,只是偶通过源代码编译出的库文件有点问题,建议不要使用\xml_pack目录下...

    SyExpat--xml解析的开源项目源码(symbian)修订版本

    xml解析的开源项目源码(symbian),在S60 2nd和3rd,以及UIQ上编译通过并能在模拟器和真机上正常运行~~ 声明:此项目与本人提交的上个SyExpat项目源代码部分没有变动,区别是通过源码编译生成的SYEXPAT.DLL库做了...

    symbian XML解析 用的是系统的自带XML解析工具

    如果要深入学习和应用Symbian的XML解析,可以通过解压该文件,查看其中的文档或代码示例,了解具体的实现细节和用法。 在实际开发中,理解如何有效地使用Symbian自带的XML解析工具是至关重要的。这不仅涉及到XML...

    Symbian 解析XML

    ### Symbian平台上的XML解析技术详解 在深入探讨Symbian系统中解析XML文件的具体方法之前,我们先对Symbian系统以及XML文件的基本概念做一个简要回顾。Symbian是一个广泛应用于早期智能手机的操作系统,它以稳定性...

    Symbian_XML_解析

    ### Symbian平台上的XML解析技术详解 #### 引言 在Symbian操作系统中,XML解析是一项核心功能,尤其对于开发基于S60 3rd版本的应用程序来说至关重要。本文将深入探讨Symbian环境下XML文件解析的机制、框架以及具体...

    Xml.rar_symbian x_xml symbi_xml symbian

    本压缩包"Xml.rar_symbian x_xml symbi_xml symbian"包含了一个名为"XmlParser"的文件,可能是一个针对Symbian平台的XML解析器。 XML解析在Symbian系统中的工作原理: 在Symbian平台上,XML解析通常涉及读取XML文档...

    symbian学习笔记(超级经典-适用于初学者)

    本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...

    symbian XML解析工具(压缩包)

    总结一下,这个"Symbian XML解析工具(压缩包)"提供了一个名为SyExpat的XML解析库,它是Expat库的Symbian版本,适合用于在Symbian平台上进行XML数据的解析。通过事件驱动的机制,开发者可以高效地处理XML文档中的各种...

    xmlParser library for Symbian S60

    Symbian S60是一个基于塞班系统的智能手机平台,它在早期版本中可能并未提供非常完善的XML解析库。标题提到的“xmlParser library for S60”是一个专为S60平台定制的XML解析库,由C++编写,解决了原生库在处理静态...

    Symbian学习笔记

    这些学习笔记涵盖了Symbian开发的多个关键方面,包括调试、基础概念、应用框架、图形用户界面(GUI)开发、多线程处理、定时器、系统集成以及网络通信。 1. **Debug On Device**: 在设备上进行调试是开发过程中的...

    symbian学习笔记,全28讲

    【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...

    塞班论坛----塞班证书签名程序

    塞班论坛是一个专门为塞班(Symbian)操作系统用户提供交流平台的社区,其中涉及了大量的技术讨论和资源分享。本文将详细介绍“塞班证书签名程序”的相关知识点,以及如何使用DOSPY签名工具v2.2.9.0627.exe来给SIS或...

    Symbian s60 3rd xml 解析总结

    doc:解析原理和总结 txt:mime类型 zip:HelloXml解析例子(运行环境3rd mr,carbide 1.3/2.0)

    S60平台的xml解析程序

    使用iksemel解析xml文档,应用于symbian平台上。本程序解压后可直接在模拟器上运行。 iks是Jabber applications的xml解析库,它具有以下特性: 1.基于POSIX和Windows,具有高度的可移植性。 2.适用于嵌入式系统。代码...

    symbianXML解析[汇编].pdf

    在Symbian平台上,XML文件解析是一项重要的技术,特别是在S60 3rd Edition中。本文档旨在深入探讨Symbian中XML解析的核心机制及其具体实现方法。 #### 二、Symbian XML解析基础 在Symbian操作系统中,对于XML文件...

    Symbian学习笔记(中国移动开发者社区).pdf

    EKA2L1 是一款开源的 Symbian 模拟器,可以在 PC 上运行 Symbian 应用程序。 #### 1.2 配置步骤 1. **安装 Symbian SDK**: 下载并安装官方提供的 Symbian SDK,确保安装过程中选择包含所有必要组件的完整版本。 2. ...

Global site tag (gtag.js) - Google Analytics