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

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

系統(tǒng)
接上回,這篇介紹那個(gè)MContentHandler的實(shí)現(xiàn),這是SAX解析方法的核心所在。
接上回,這篇介紹那個(gè)MContentHandler的實(shí)現(xiàn),這是SAX解析方法的核心所在。

  先看看我要解析的XML文件如下所示,其實(shí)很簡(jiǎn)單,因?yàn)樗薊lement和Attribute以外沒(méi)有其它東西了。

<?xml version="1.0" encoding="utf-8" ?>
<channels>
<channel id="10" title="時(shí)政" >
<content id="1001" title="廣東牛奶中毒事件污染源調(diào)查結(jié)果1周后公布"/>
<content id="1002" title="河南淅川公安局因兒童被拐案設(shè)'局恥日'"/>
<content id="1003" title="深圳大學(xué)135名師生感染病毒引發(fā)腹瀉"/>
</channel>
<channel id="11" title="國(guó)際">
<content id="1101" title="巴以將于4月7日恢復(fù)領(lǐng)導(dǎo)人級(jí)和談"/>
<content id="1102" title="古巴解除長(zhǎng)期禁令允許國(guó)民入住涉外酒店"/>
<content id="1103" title="聯(lián)合國(guó)決定繼續(xù)對(duì)剛果(金)實(shí)行武器禁運(yùn)"/>
<content id="1104" title="俄拒絕接受美國(guó)進(jìn)攻性戰(zhàn)略武器問(wèn)題建議"/>
</channel>
<channel id="12" title="財(cái)經(jīng)">
<content id="1201" title="大飛機(jī)公司擬定名中國(guó)商用飛機(jī)有限公司"/>
<content id="1202" title="大部制新部委定編制方案6月底前上報(bào)"/>
</channel>
</channels>
 

  我們的解析處理器的聲明如下:

#include <xmlcontenthandler.h>
#include <xmldocumentparameters.h>

using namespace Xml;

class TNewsChannel
...{
public:
    TInt id;
    HBufC16 * title;
};

class TNewsContent
...{
public:
    TInt id;
    TInt pid;
    HBufC16 * title;
};

class CChannelXmlHandler : public MContentHandler ...{
public:
    // Constructors and destructor
    ~CChannelXmlHandler();
    static CChannelXmlHandler* NewL();
    static CChannelXmlHandler* NewLC();
   
    RArray<TNewsChannel>* GetChannels();
    RArray<TNewsContent>* GetContents();
    TInt    GetContent(TInt pid,TInt index);
    TInt    ContentCount(TInt pid);

private:

    CChannelXmlHandler();
    void ConstructL();

private: // from MContentHandler

    void OnStartDocumentL( const RDocumentParameters &aDocParam,
        TInt aErrorCode );
   
    void OnEndDocumentL( TInt aErrorCode );
   
    void OnStartElementL( const RTagInfo &aElement,
        const RAttributeArray &aAttributes, TInt aErrorCode );
        
    void OnEndElementL( const RTagInfo &aElement, TInt aErrorCode );
   
    void OnContentL( const TDesC8 &aBytes, TInt aErrorCode );
   
   // ... ...
     
private:
    TInt iCurPID;
    RArray<TNewsChannel> iChannels;
    RArray<TNewsContent> iContents;
   
};

  大多數(shù)是MContentHandler所聲明的方法,這就是SAX事件解析模式的關(guān)鍵了,我們只需要在這些方法中做相應(yīng)的處理即可。

  除此之外,iChannels和iContents是我們定義了用來(lái)保存解析結(jié)果的成員,它的類(lèi)型是RArray,關(guān)于RArray可以參考我的別一篇筆記:http://blog.csdn.net/sharetop/archive/2008/03/21/2203450.aspx

  因?yàn)槲覀兊腦ML比較簡(jiǎn)單,所以在CPP中只要處理OnStartElementL就可以了:

  這個(gè)回調(diào)會(huì)在解析器遇到元素頭時(shí)進(jìn)入,然后我們就可以根據(jù)傳入的參數(shù)取到當(dāng)前元素的信息,如元素名稱(chēng)、屬性值等,將它們保存在我們定義的數(shù)據(jù)成員中以備將來(lái)使用即可。

  在使用這個(gè)解析器的地方,比如我們的AppView負(fù)責(zé)解析XML文件,那它應(yīng)該包含一個(gè)MContentHandler的成員,并且它實(shí)現(xiàn)接口MXMLHandlerObserver。

  于是,這樣啟動(dòng)解析過(guò)程:
 

    iChannelHandler=CChannelXmlHandler::NewL();
    iXmlParser=CXMLActiveParser::NewL(*this,*iChannelHandler);
    iXmlParser->StartL(KChannelXMLFile);

然后在它的OnParseCompleted方法中去iChannelHandler中取出解析結(jié)果,展示出來(lái)或者隨便怎么用了。

void CChannelXmlHandler::OnStartElementL( const Xml::RTagInfo &aElement,
        const Xml::RAttributeArray &aAttributes, TInt aErrorCode )
...{
    if(aElement.LocalName().DesC().Compare(KChannelName)==0)...{       
        TNewsChannel chn;
        for(TInt i=0;i<aAttributes.Count();i++)...{
            if(aAttributes.Attribute().LocalName().DesC().Compare(KTitleName)==0)...{
                chn.title=CnvUtfConverter::ConvertToUnicodeFromUtf8L(aAttributes.Value().DesC());
            }
            else if(aAttributes.Attribute().LocalName().DesC().Compare(KIdName)==0)...{
                TLex8 lex;
                lex.Assign(aAttributes.Value().DesC());
                lex.Val(chn.id);
            }
        }
        iChannels.Append(chn);
        iCurPID=chn.id;
    }
    else if(aElement.LocalName().DesC().Compare(KContentName)==0)...{
        TNewsContent cnt;
        cnt.pid=iCurPID;
        for(TInt i=0;i<aAttributes.Count();i++)...{
            if(aAttributes.Attribute().LocalName().DesC().Compare(KIdName)==0)...{
                TLex8 lex;
                lex.Assign(aAttributes.Value().DesC());
                lex.Val(cnt.id);
            }
            else if(aAttributes.Attribute().LocalName().DesC().Compare(KTitleName)==0)...{
                cnt.title=CnvUtfConverter::ConvertToUnicodeFromUtf8L(aAttributes.Value().DesC());
            }
        }
        iContents.Append(cnt);
    }

 

【編輯推薦】

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

2009-04-12 08:59:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:00:08

Symbian諾基亞移動(dòng)OS

2009-04-12 09:01:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:06:00

Symbian諾基亞移動(dòng)OS

2009-04-12 09:03:50

Symbian諾基亞移動(dòng)OS

2009-04-12 08:57:50

Symbian諾基亞移動(dòng)OS

2009-04-12 08:55:18

Symbian諾基亞移動(dòng)OS

2009-04-12 08:36:09

Symbian諾基亞移動(dòng)OS

2009-04-12 08:51:50

Symbian諾基亞移動(dòng)OS

2009-04-12 09:07:17

Symbian諾基亞移動(dòng)OS

2009-04-12 08:45:32

Symbian諾基亞移動(dòng)OS

2009-04-12 08:48:47

Symbian諾基亞移動(dòng)OS

2009-04-12 08:50:08

Symbian諾基亞移動(dòng)OS

2009-04-12 08:46:43

Symbian諾基亞移動(dòng)OS

2012-05-24 09:38:08

Symbian

2009-04-12 08:52:52

Symbian諾基亞移動(dòng)OS

2010-10-27 13:14:24

Symbian

2010-07-12 09:34:59

Symbian開(kāi)發(fā)

2010-07-02 09:54:32

Symbian開(kāi)發(fā)

2009-05-06 08:42:03

SymbianS60移動(dòng)OS
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日日天天 | 一区二区三区韩国 | 天天综合永久入口 | 天天天插| 久久精品国产一区二区 | 国产免费高清 | 999精品视频| 日韩插插| 精品无码久久久久国产 | 欧美精品一区二区三区在线播放 | 91精品国产色综合久久 | 在线一区视频 | 久久精品免费观看 | www.久 | 中文字幕精品一区二区三区精品 | 自拍视频精品 | 亚洲精品一区二区 | 久久精品国产免费看久久精品 | 久久一二三区 | 日本一区二区三区在线观看 | 日韩久久中文字幕 | 欧美成人综合 | 91麻豆精品国产91久久久资源速度 | 久草新在线 | av大片 | 最新av在线播放 | 国产精品日韩一区 | 丁香婷婷综合激情五月色 | 日本成人综合 | 国产激情精品视频 | 成人欧美一区二区三区白人 | 日韩精品一区二区三区在线观看 | 国产精品国产a级 | 麻豆精品国产91久久久久久 | 国产精品久久久久久吹潮 | 韩日有码 | 亚洲女人的天堂 | 欧美一级二级三级视频 | 国产精品久久久久久久久久妇女 | 日本成人在线观看网站 | 黄色片网此 |