📄 htmlparserx.h
字号:
#pragma once
#include "..\xlibplus\xvector.h"
#include "..\xlibplus\xObjectPool.h"
#include <string>
class CHtmlParserX
{
public:
class CTagProperty
{
public:
CTagProperty( const char * skey = "", const char * svalue = "" )
{
m_sKey = skey;
m_sValue = svalue;
}
~CTagProperty()
{
}
std::string m_sKey;
std::string m_sValue;
static CTagProperty * New(){ return m_xTagPropertyPool.newObject();}
static VOID Delete( CTagProperty * pTagProperty ){ m_xTagPropertyPool.deleteObject( pTagProperty );}
protected:
static xUnlimitedObjectPool<CTagProperty> m_xTagPropertyPool;
};
class CHtmlTag
{
public:
CHtmlTag()
{
m_sName = "";
m_pParser = NULL;
m_iContentStart = 0;
m_iContentEnd = 0;
m_bClosed = false;
}
~CHtmlTag()
{
Clear();
}
VOID Show();
BOOL Parse( CHtmlParserX * pParser, char * &pszContent );
VOID Clear()
{
m_sName = "";
for( int i = 0;i < m_vPropertys.size();i ++ )
{
CTagProperty::Delete( m_vPropertys[i] );
}
m_vPropertys.clear();
for( int i = 0;i < m_vChildTags.size();i ++ )
{
CHtmlTag::Delete( m_vChildTags[i] );
}
m_vChildTags.clear();
m_iContentStart = 0;
m_iContentEnd = 0;
m_pParser = NULL;
m_bClosed = false;
}
std::string GetContent();
public:
//std::string m_sFirstText;
//std::string m_sLastText;
CHtmlParserX * m_pParser;
bool m_bClosed; // 是否封闭,也就是<tagname></tagname>这种形式
int m_iContentStart;
int m_iContentEnd;
std::string m_sName;
xVector<CTagProperty*> m_vPropertys;
xVector<CHtmlTag*> m_vChildTags;
static CHtmlTag * New(){ return m_xHtmlTagPool.newObject();}
static VOID Delete( CHtmlTag * pTag ){ m_xHtmlTagPool.deleteObject( pTag );}
protected:
static xUnlimitedObjectPool<CHtmlTag> m_xHtmlTagPool;
};
public:
CHtmlParserX(void);
virtual ~CHtmlParserX(void);
BOOL Parse( std::string & sHtmlContent );
std::string m_sContent;
CHtmlTag * m_pHtmlTags;
protected:
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -