#pragma once #include #include #include class TiXmlDocument; class TiXmlNode; class CStream; class CFileStream; #define SAFE_DELETE(x) if(x) { delete x; x=NULL; } class CXMLParser { public: CXMLParser(); ~CXMLParser(); bool Open(const char * fname, bool non_standard = false); bool OpenByBuffer(const char* pXmlBuf); void Reset(); //Seek Reset bool FirstChildElement(const char * item, bool stepdown = false); bool GoParent(); bool NextSiblingElement(const char * item); const WCHAR * GetAttribute(const char * att); const WCHAR * GetText(); int Scan(char * form, ...); int ScanAtt(const char * att, char * form, ...); private : TiXmlDocument * m_pTiDocument; TiXmlNode * m_pTiNode; std::list m_BaseNode; std::vector m_CharList; }; class TiXmlElement; class TiXmlComment; class TiXmlText; class TiXmlDeclaration; class CXMLCreater { public: CXMLCreater(); ~CXMLCreater(); bool Init(const char * fname, bool non_standard = false); bool Init(const char * fname, const char * filePath, bool non_standard = false); bool InitByUtf8(const char * fname, const char * filePath, bool non_standard = false); bool AddElement(const char * pName, bool bStepDown = false); bool AddAttribute(const char * pName, const char * pValue); bool AddAttribute(const char * pName, const WCHAR * pValue); bool AddAttribute(const char * pName, int nValue); void GoRarent(); void Create(); private: bool m_bStepDown; TiXmlElement * m_pTiCurElement; TiXmlDocument * m_pTiBaseDocument; TiXmlDeclaration * m_pTiDeclaration; std::list m_BaseElement; std::list m_BaseComment; std::list m_BaseTextValue; char m_szFileName[MAX_PATH]; };