Codejie's C++ Space

Using C++

LingosHook: CDocumentOutputObject


    TinyHtmlParser更新完成,为了方便分解HTML,又新增了一个元素类型--ET_VALUE。此类型将HTML的TAG和其VALUE分离开,使得VALUE成为独立的元素。当然,为了保持原有的代码不改动,在分解HTML数据时,是否将VALUE作为单独元素处理是可以选择的。

int Load(const std::wstring& str, bool strict = truebool valueseparate = false);


    实际TinyHtmlParser最早就是这个样子的,只是后来为了让TAG跟VALUE有所关联,才将VALUE放置到TAG对象内部的。唉,写代码有时也很纠结的。。。

    这次主要说明下的是新增的CDocumentOutputObject类。此类用于输出HTML分解后的CDocumentObject中的数据,而且是非常灵活的输出。比如,可以指定某些或者全部TAG、VALUE或者ATTRIB不输出。

class CDocumentOutputObject
{
protected:
    typedef std::
set<std::wstring> TKeySet;
    typedef std::stack
<std::wstring> TTagStack;
public:
    
enum KeyType { KT_TAG = 0, KT_VALUE, KT_ATTRIB, KT_ALL_TAG, KT_ALL_VALUE, KT_ALL_ATTRIB };
    typedef std::map
<KeyType, TKeySet> TKeyMap;
public:
    
static void AddKey(TKeyMap* keymap, KeyType type, const wxString& str = wxEmptyString);
    
static void RemoveKey(TKeyMap* keymap, KeyType type, const wxString& str = wxEmptyString);
    
static bool IsKey(const TKeyMap* keymap, KeyType type, const wxString& str);

    
static int Rewrite(const CDocumentObject& doc, wxString& ostr, const TKeyMap* exclude = NULL);
protected:
    
static void RewriteElement(wxString& ostr, const TinyHtmlParser::CElementObject* root, const CElementObject* e, TTagStack& tagstack, const TKeyMap* exclude);
    
static bool IsKey(const TKeyMap* keymap, KeyType type, const std::wstring& str);
private:
    
static void RewriteTag(wxString& ostr, const CElementObject* e, TTagStack& tagstack, const TKeyMap* exclude);
    
static void RewriteTagEnd(wxString& ostr, const CElementObject* e, TTagStack& tagstack, const TKeyMap* exclude);
    
static void RewriteAttrib(wxString& ostr, const CElementObject* e, const TKeyMap* exclude);
    
static void RewriteValue(wxString& ostr, const CElementObject* e, const TKeyMap* exclude);
}
;

    当所有的TAG不输出时,是不是我们就可以得到HTML中的存TEXT数据了?

    wxString ret;
    CDocumentOutputObject::TKeyMap exclude;
    
    
//CDocumentOutputObject::AddKey(&exclude, CDocumentOutputObject::KT_TAG, wxT("IMG"));
    CDocumentOutputObject::AddKey(&exclude, CDocumentOutputObject::KT_ALL_TAG);
    
//CDocumentOutputObject::AddKey(&exclude, CDocumentOutputObject::KT_ALL_VALUE);
    CDocumentOutputObject::AddKey(&exclude, CDocumentOutputObject::KT_ALL_ATTRIB);

    CDocumentOutputObject::Rewrite(doc, ret, 
&exclude);


    哈哈。。。有时我觉得我真的很强力啊。。。(低调,低调。。。哈哈。。。)

posted on 2012-01-05 11:36 codejie 阅读(1220) 评论(0)  编辑 收藏 引用 所属分类: C++


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜