www.pudn.com > ParseXML.rar > XmlFile.h


#pragma once 
#include "afx.h" 
 
#include "Tree.h" 
 
///////////////////////////////////////////////////////////////////// 
// class CXmlTag 
 
class CDataBuffer 
{ 
public: 
	CDataBuffer(); 
	~CDataBuffer(); 
 
private: 
	BYTE*		m_pDataBuffer; 
	DWORD		m_nDataSize; 
	DWORD		m_nReadPos; 
 
protected: 
 
 
public: 
	BOOL CreateFromFile(LPCTSTR lpszFilePath); 
	void FreeBuffer(); 
	BOOL ReadByte(BYTE& ch); 
	void GoBack(DWORD nCount); 
	DWORD GetPosition() { return m_nReadPos; } 
	void CopyData(void* pBuffer, DWORD nPos, DWORD nLen); 
 
	BOOL IsEOF() { return m_nReadPos < m_nDataSize - 1; } 
}; 
 
///////////////////////////////////////////////////////////////////// 
// class CXmlTag 
 
class CXmlTag : public CNode 
{ 
public: 
	CXmlTag(); 
	virtual ~CXmlTag(); 
 
private: 
	BYTE	m_nTagType;	// -1-invalid 0-text 1-comment 2- 3- 4- 
	BYTE*	m_pBuffer; 
protected: 
	int GetAttributeLen(char* name); 
	int GetAttribute(char* name, char*value, int len); 
 
	int GetValueLen(); 
	int GetValue(char* value, int len); 
 
public: 
	BOOL IsXmlVersionTag(); 
	BOOL Read(CDataBuffer& data); 
	BYTE GetTagType() { return m_nTagType; } 
	BOOL IsSameName(char* name); 
 
	CString GetValue(); 
}; 
 
///////////////////////////////////////////////////////////////////// 
// class CXmlFile 
 
class CXmlFile 
{ 
public: 
	CXmlFile(void); 
	virtual ~CXmlFile(void); 
 
//ÊôÐÔ 
private: 
	CTree	m_XmlNodeTree; 
 
//²Ù×÷ 
protected: 
	BOOL ParseXml(CDataBuffer& data); 
	BOOL ParseXml(CDataBuffer& data, CNode* pParentNode); 
 
//½Ó¿Ú 
public: 
	BOOL Open(LPCTSTR lpszFilePath); 
	void Close(); 
 
	CXmlTag* GetRootElement(); 
	int GetChildElementCount(CXmlTag* pParent); 
	CXmlTag* GetChildElement(CXmlTag* pParent, int nIndex); 
	CXmlTag* FindChildElement(CXmlTag* pParent, char* name); 
};