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

Symbian學習筆記(15)

系統
今天想分享的是如何在Symbian平臺上解析XML文件,不需要第三方的東西,Symbian已經為我們提供了這個類CParser。
今天想分享的是如何在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;
};

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

 

  實現的部分主要功能在Construct、Start和Run三個函數中:

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" ) ,以及它需要的回調處理器是iHandler。然后在StartL時讀入XML文件,準備解析。在RunL中如果未完成則開始解析,真到完成后則調用 iObserver的onParseCompleted通知觀察者“我處理完了,請拿走結果吧”。

【編輯推薦】

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

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-10-27 13:14:24

Symbian

2010-07-12 09:34:59

Symbian開發

2010-07-02 09:54:32

Symbian開發

2009-05-06 08:42:03

SymbianS60移動OS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品a视频 | 成人免费视频观看视频 | 国产欧美一区二区三区日本久久久 | 久久免费香蕉视频 | 成人免费毛片片v | 毛片免费看 | 波多野结衣二区 | 91精品国产乱码久久久久久久 | 国产色视频网站 | 国产精品福利在线 | av激情在线 | 日本久久www成人免 成人久久久久 | 91传媒在线观看 | 成人午夜精品 | 天天操天天怕 | www.久草.com | 国产精品极品美女在线观看免费 | 亚洲欧美中文日韩在线v日本 | 亚洲视频在线观看免费 | 一区二区三区不卡视频 | 成人av网站在线观看 | 欧美一区二区三区在线播放 | 精品国产一区二区三区性色av | 国产精品欧美一区二区三区不卡 | 欧美精品片 | 成人精品一区 | 91看片免费 | 亚洲精品v日韩精品 | 九九导航 | 97人澡人人添人人爽欧美 | 一区二区三区四区免费在线观看 | 中文字幕一区二区三区日韩精品 | 天堂综合网久久 | 精品久久国产 | 欧美.com | 夜久久 | 国产高清精品在线 | 国产日韩欧美 | 亚洲精品久久久久久一区二区 | 欧美4p | 国产成人精品久久二区二区 |