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);
};