成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Symbian學(xué)習(xí)筆記(15)

系統(tǒng)
今天想分享的是如何在Symbian平臺上解析XML文件,不需要第三方的東西,Symbian已經(jīng)為我們提供了這個類CParser。
今天想分享的是如何在Symbian平臺上解析XML文件,不需要第三方的東西,Symbian已經(jīng)為我們提供了這個類CParser。

  網(wǎng)上也有這方面的資料,建議參考:

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

  不過,要注意的是Symbian中的CParser是基于SAX方式來解析的也就是說它是基于事件流方式,對于SAX,如果做過JAVA開發(fā)的一般不會陌生了。與DOM相比SAX方式在操作上會有點麻煩而且顯得沒那么好理解。

  簡要比較一下吧,DOM是將XML在內(nèi)存中展開成一個樹的模型,我們可以方便地訪問它的每個子節(jié)點,可讀可寫。但是SAX呢?我們只能通過一個單向文本流去解析XML,在過程中有多個事件回調(diào)(開始某個元素處理、結(jié)束某個元素處理等等),它是單向只讀的。

  下面我們來詳細說明一下如何實現(xiàn)吧。

  首先,我們建立一個解析器派生于CActive,由它負責(zé)整個解析過程(因為這是一個異步操作)。

#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;
};

  除了CActive所必需的東西以外,我們增加了 iParser 成員負責(zé)解析,iBuffer保存文件內(nèi)容以供給iParser去解析,而iHandler是SAX所特有的回調(diào)處理類(后面詳述),iObserver 則是自定義的一個接口,其實是一個Notifer,就是在解析完成后調(diào)用它的OnParseCompleted方法。

 

  實現(xiàn)的部分主要功能在Construct、Start和Run三個函數(shù)中:

void CXMLActiveParser::ConstructL() ...{   
    CActiveScheduler::Add( this); // Add to scheduler
    iParser = CParser::NewL( KXmlMimeType, *iHandler );   
    iFs.Connect();
}

void CXMLActiveParser::StartL(const TDesC& aFileName) ...{
    Cancel();
   
    User::LeaveIfError( iFile.Open( /**//*CCoeEnv::Static()->FsSession()*/iFs, aFileName,
            EFileRead ) );
    delete iBuffer;
    iBuffer = 0;
   
    iBuffer = HBufC8::NewL( KFileBufferSize );
    TPtr8 bufferPtr( iBuffer->Des() );
    iFile.Read( bufferPtr, KFileBufferSize, iStatus );
    SetActive();
  
    iParser->ParseBeginL();
}

void CXMLActiveParser::RunL() ...{
    if ( KErrNone == iStatus.Int() )...{
        if ( iBuffer->Length() == 0)...{
            iParser->ParseEndL();
            iFile.Close();
            delete iBuffer;
            iBuffer = 0;
            
            iObserver->OnParseCompleted(KErrNone);
        }
        else ...{
            iParser->ParseL( *iBuffer );
            TPtr8 bufferPtr( iBuffer->Des() );
            iFile.Read( bufferPtr, KFileBufferSize, iStatus );
            SetActive();
        }
    }
    else ...{
        //error handler.
        iObserver->OnParseCompleted(iStatus.Int());
    }
}

  注意CParser在NewL時告訴它文檔類型是 _LIT8( KXmlMimeType, "text/xml" ) ,以及它需要的回調(diào)處理器是iHandler。然后在StartL時讀入XML文件,準備解析。在RunL中如果未完成則開始解析,真到完成后則調(diào)用 iObserver的onParseCompleted通知觀察者“我處理完了,請拿走結(jié)果吧”。

【編輯推薦】

  1. Symbian每6個月發(fā)布一款新開源操作系統(tǒng)
  2. 微軟建WindowsMarketplace 完善智能機平臺
  3. 大力模仿Android 傳微軟WM6.5可裝插件
責(zé)任編輯:龐桂玉 來源: it168
相關(guān)推薦

2009-04-12 08:59:05

Symbian諾基亞移動OS

2009-04-12 09:00:08

Symbian諾基亞移動OS

2009-04-12 09:02:32

Symbian諾基亞移動OS

2009-04-12 09:06:00

Symbian諾基亞移動OS

2009-04-12 09:03:50

Symbian諾基亞移動OS

2009-04-12 08:57:50

Symbian諾基亞移動OS

2009-04-12 08:55:18

Symbian諾基亞移動OS

2009-04-12 08:36:09

Symbian諾基亞移動OS

2009-04-12 08:51:50

Symbian諾基亞移動OS

2009-04-12 09:07:17

Symbian諾基亞移動OS

2009-04-12 08:45:32

Symbian諾基亞移動OS

2009-04-12 08:48:47

Symbian諾基亞移動OS

2009-04-12 08:50:08

Symbian諾基亞移動OS

2009-04-12 08:46:43

Symbian諾基亞移動OS

2012-05-24 09:38:08

Symbian

2009-04-12 08:52:52

Symbian諾基亞移動OS

2010-07-12 09:34:59

Symbian開發(fā)

2010-10-27 13:14:24

Symbian

2010-07-02 09:54:32

Symbian開發(fā)

2009-05-06 08:42:03

SymbianS60移動OS
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久久久久吹潮 | 日韩av免费在线观看 | 一区视频在线免费观看 | 日韩在线一区二区三区 | 久久男人 | 中文字幕影院 | 一区二区三区视频在线 | 成人免费观看男女羞羞视频 | av黄色在线观看 | 99精品一区二区 | 精品久久久久一区二区国产 | 国产精品久久久久久久午夜片 | 国产男女视频网站 | 亚洲品质自拍视频 | 久久久久久蜜桃一区二区 | 夜夜爽99久久国产综合精品女不卡 | 欧美在线观看免费观看视频 | 性欧美xxxx | 久久精品国产久精国产 | 成人亚洲视频 | 国际精品久久 | 欧美一区二区三区在线 | 中文字幕动漫成人 | 91精品国产综合久久国产大片 | 中文字幕乱码一区二区三区 | 精品一区二区三区中文字幕 | 国产福利在线 | 国产精品国产a级 | 9999国产精品欧美久久久久久 | 国产福利在线看 | 成人做爰69片免费观看 | 欧美性网站 | 国产综合久久 | 日本超碰 | 亚洲一区三区在线观看 | 亚洲二区视频 | 久久亚洲欧美日韩精品专区 | 成人高清在线视频 | 免费h视频 | 日韩在线视频一区 | 国产黄色在线观看 |