baiseda 发表于 2013-2-7 01:42:30

Symbian学习笔记(15)

我曾在前面介绍过一个可用于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,由它负责整个解析过程(因为这是一个异步操作)。
<div style="">http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif#include<xmlparser.h>
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif#include<xmlcontenthandler.h>
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifusingnamespaceXml;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifclassMXMLHandlerObserver
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gifhttp://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifpublic:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifvirtualvoidOnParseCompleted(TIntaError)=0;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif};
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gifhttp://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gifclassCXMLActiveParser:publicCActive...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifpublic:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif~CXMLActiveParser();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifstaticCXMLActiveParser*NewL(MXMLHandlerObserver&aObserver,MContentHandler&aHandler);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifstaticCXMLActiveParser*NewLC(MXMLHandlerObserver&aObserver,MContentHandler&aHandler);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifpublic:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifvoidStartL(constTDesC&aFileName);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifprivate:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifCXMLActiveParser(MXMLHandlerObserver&aObserver,MContentHandler&aHandler);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifvoidConstructL();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifprivate:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifvoidRunL();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifvoidDoCancel();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifTIntRunError(TIntaError);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifprivate:
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifCParser*iParser;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifHBufC8*iBuffer;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifRFileiFile;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifMContentHandler*iHandler;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifMXMLHandlerObserver*iObserver;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gifRFsiFs;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif};
页: [1]
查看完整版本: Symbian学习笔记(15)