////////////////////////////////////////////////////////////////////////////// //文件: XmlParse.h //主要功能: 分析保存的XML(双狐扩展名为DML文件),将其关键字及值分别开 // //程序编写: 2008-05-08 // // ///////////////////////////////////////////////////////////////////////////// #pragma once #include "layer.h" class AFX_EXT_CLASS CXmlParse //ggff { public: CXmlParse(void); virtual ~CXmlParse(void); void Clear(void); CString ReadFileName(CFile& fr); //读取一串XML,包括关键字及其值 //分析该串XML语句,如果正确将关键字保存在m_strKey中,数值保存在m_valArray中 int ReadBeginSection(CFile& fr); int ReadEndSection(CFile& fr, BOOL bHadBegin); BOOL IsIncludeValue(void); //读取一串XML的值,结束符号为空格、TAB键、回车及<(标示一新段的开始), 返回值表示是否一个新段的开始 BOOL ReadValue(CFile& fr); BOOL ReadInner(CFile& fr); //不区分大小写比较键值 BOOL IsKey(CString lpszKeyString); //与当前m_strKey值比较 BOOL IsKey(const CString& key, LPCTSTR lpszKeyString); BOOL ParaseKeyValue(CString strKeyValue, CString& key, CString& val); //分析的字符串以=分隔KEY与VALUE BOOL ParaseKeyValue(int nIndex, CString& key, CString& val); //分析的字符串以=分隔KEY与VALUE int ReadRect(CFile& fr, CRect8& rect); //读取矩形范围DML关键写及值 //已经将信息读取到了该类中,仅进行分析并形成需要的元素 int ParaseAndReadRect(CFile& fr, CRect8& rect); int ParaseLayer(CLayer* pLayer, void* pxy); int ParaseFont(LOGFONT& logFont, CSize8& size); int ParaseFont(LOGFONT& logFont, CSize8& size, COLORREF& color, int& script); int DML_ParaseHowToViewCurve(CHowToViewCurve* phtv, void* pxy); int DML_ParaseHowToViewPoint(CHowToViewPoint* phtp, void* pxy); int DML_WriteMemoryBlock(CFile& fw, BYTE* lpData, DWORD nDataLength, LPCTSTR strType, int nBaseTabNum = 0); BYTE* DML_ReadMemoryBlock(CFile& fr, DWORD& nOutDataLength, CString& strType); int PCG_ParaseHowToViewCurve(CHowToViewCurve* phtv, void* pxy); int PCG_ParaseHowToViewPoint(CHowToViewPoint* phtp, void* pxy); int PCG_WriteMemoryBlock(CFile& fw, BYTE* lpData, DWORD nDataLength, LPCTSTR strType, const short& ver = 0, int nBaseTabNum = 0); BYTE* PCG_ReadMemoryBlock(CFile& fr, DWORD& nOutDataLength, CString& strType); BOOL IsEndSection() { return m_bOneLineEndSection; } //ggff2025 int ParaseAndReadCoordinate(CFile& fr, CPointList& coords); int ParaseAndReadList(CFile& fr); //具体数据保存在m_valArray中 protected: int ReadSection(CFile& fr, BOOL bBegin); //读取一串XML,其开始符号为<,结束符号为> int ReadValueOne(CFile& fr, BOOL *bNewSection); //读取一串XML的值,结束符号为< void ConvertCopy(char * &line,int len, char* &dest); int ScanfString(CStringArray &m_type, char* str, int len); BOOL m_bIncludeValue; public: BOOL m_bOneLineEndSection; //ggff 2025 用来表示读了一条语句是否是一个完成xml语句,ReadBeginSection只是读取< >中的语句,不区分是否 < > 和< /> 所以增加这个(用于区分