TinyHtmlParser更新完成,為了方便分解HTML,又新增了一個元素類型--ET_VALUE。此類型將HTML的TAG和其VALUE分離開,使得VALUE成為獨立的元素。當(dāng)然,為了保持原有的代碼不改動,在分解HTML數(shù)據(jù)時,是否將VALUE作為單獨元素處理是可以選擇的。
int Load(const std::wstring& str, bool strict = true, bool valueseparate = false); 實際TinyHtmlParser最早就是這個樣子的,只是后來為了讓TAG跟VALUE有所關(guān)聯(lián),才將VALUE放置到TAG對象內(nèi)部的。唉,寫代碼有時也很糾結(jié)的。。。
這次主要說明下的是新增的CDocumentOutputObject類。此類用于輸出HTML分解后的CDocumentObject中的數(shù)據(jù),而且是非常靈活的輸出。比如,可以指定某些或者全部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);
}; 當(dāng)所有的TAG不輸出時,是不是我們就可以得到HTML中的存TEXT數(shù)據(jù)了?
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); 哈哈。。。有時我覺得我真的很強力啊。。。(低調(diào),低調(diào)。。。哈哈。。。)