XML (eXtensible Markup Language) 是一种简单的数据存储语言,使用一系列简单的标记描述数据,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。更重要的是,xml 可以描述非常复杂的数据结构,比如树状结构。
为了建立一个通用,易于扩展,易于使用的数据导入导出应用,首先得定义一些数据类型用于存储 int, float, string, array 等基本数据类型。
#pragma once
#include "Collection.h"
class CDataType
{
public:
CString Id;
CDataType(void) {}
virtual ~CDataType() {}
virtual char* GetTypeName() { return ""; }
virtual int& Integer() { ::AfxThrowInvalidArgException(); }
virtual float& Float() { ::AfxThrowInvalidArgException(); }
virtual CString& String() { ::AfxThrowInvalidArgException(); }
virtual CDataType& operator[](LPCTSTR key) { ::AfxThrowInvalidArgException(); }
virtual CDataType& operator[](int index) { ::AfxThrowInvalidArgException(); }
virtual bool IsCollection() { return false; }
virtual CString& ToXML(CString& s) { return s; }
};
class CIntegerType: public CDataType
{
int m_Object;
public:
CIntegerType(int value) { m_Object = value; }
virtual char* GetTypeName() { return "INT"; }
virtual int& Integer() { return m_Object; }
virtual CString& ToXML(CString& s) {
s.Format("<INT ID=/"%s/" V=/"%d/" />", Id, m_Object);
return s;
}
};
class CFloatType: public CDataType
{
float m_Object;
public:
CFloatType(float value) { m_Object = value; }
virtual char* GetTypeName() { return "FLOAT"; }
virtual float& Float() { return m_Object; }
virtual CString& ToXML(CString& s) {
s.Format("<FLOAT ID=/"%s/" V=/"%g/" />", Id, m_Object);
return s;
}
};
class CStringType: public CDataType
{
CString m_Object;
public:
CStringType(LPCTSTR value) { m_Object = value; }
virtual char* GetTypeName() { return "STR"; }
virtual CString& String() { return m_Object; }
virtual CString& ToXML(CString& s) {
s.Format("<STR ID=/"%s/" V=/"%s/" />", Id, m_Object);
return s;
}
};
class CStringArrayType: public CDataType
{
CArray<CString*, CString*> m_Object;