XML Encapsulation

刚刚看了看 TinyXML 的使用

http://www.cnblogs.com/freecoder/archive/2006/08/07/TinyXmlStapleA.html

 

Note: 




小封装 了 一下 。 比较粗糙, 请不要骂我; 封装原因: 当需要保存大量的XMl 文件时 不想频繁地 new 和 delete;
对TinyXML 不是太熟悉; 不知道有没有 教一下我 有没有更好的方法处理 大量保存XML 文件时 时如何处理的










#include <conio.h>
#include <iostream>
using namespace std;

#include <tinyxml.h>
#pragma comment(lib , "tinyxml.lib")

class SaveTinyXML;
typedef SaveTinyXML* SaveTinyXMLPtr;

#define Blizmax_TinyXML_Clear() /
void Clear() /
{ /
parent = 0; /
firstChild = 0; /
lastChild = 0; /
prev = 0; /
next = 0; /
}
class BlizmaxTiXmlDocument : public TiXmlDocument
{
public:
Blizmax_TinyXML_Clear();
};


class BlizmaxTiXmlElement : public TiXmlElement
{
public:
BlizmaxTiXmlElement(const char * _value)
:TiXmlElement(_value)
{}

BlizmaxTiXmlElement(const TiXmlElement& copy)
:TiXmlElement(copy)
{}

Blizmax_TinyXML_Clear();
};

class BlizmaxTiXmlText : public TiXmlText
{

public:
BlizmaxTiXmlText(char * initValue )
:TiXmlText(initValue)
{}

BlizmaxTiXmlText(const TiXmlText& copy )
:TiXmlText(copy)
{}
Blizmax_TinyXML_Clear();

};
class SaveTinyXML
{
public:
enum Constant
{
MaxElementNum = 20
,MaxTextNum = 80
};

public:
SaveTinyXML()
:m_iElementUsed(0)
,m_iTextUse(0)
{
for (int i =0; i<MaxElementNum; i++)
{
m_paElement[i] = new BlizmaxTiXmlElement("");
}

for (int i =0; i<MaxElementNum; i++)
{
m_paText[i] = new BlizmaxTiXmlText("");
}

}
void Save(const char* pFileFullName)
{
m_cDocument.SaveFile(pFileFullName);

//Clear
m_cDocument.Clear();
for (int i=0; i<m_iElementUsed; i++)
{
m_paElement[i]->Clear();


}
for (int i =0; i<m_iTextUse; i++)
{
m_paText[i]->Clear();
}
m_iElementUsed = 0;
m_iTextUse =0;
}
void Clear();

BlizmaxTiXmlElement* Create_Element(const char* pName)
{
if((m_iElementUsed+1)<MaxElementNum)
{
++m_iElementUsed;
m_paElement[m_iElementUsed]->SetValue(pName);
return m_paElement[m_iElementUsed];
}
return NULL;
}
BlizmaxTiXmlText* Create_Text(const char* pString)
{
if((m_iTextUse+1)<MaxTextNum)
{
++m_iTextUse;
m_paText[m_iTextUse]->SetValue(pString);
return m_paText[m_iTextUse];
};
return NULL;
}
BlizmaxTiXmlDocument* Get_Document()
{
return &m_cDocument;
}
public:
BlizmaxTiXmlDocument m_cDocument;
BlizmaxTiXmlElement* m_paElement[MaxElementNum];
int m_iElementUsed;
BlizmaxTiXmlText* m_paText[MaxTextNum];

int m_iTextUse;


public:
static SaveTinyXMLPtr Get_InstancePtr()
{
return &sm_cSaveTinyXML;
}
public:
static SaveTinyXML sm_cSaveTinyXML;
};

SaveTinyXML SaveTinyXML::sm_cSaveTinyXML;

void Save(const char* pFileName)
{

BlizmaxTiXmlDocument *myDocument = SaveTinyXML::Get_InstancePtr()->Get_Document();
BlizmaxTiXmlElement *RootElement = SaveTinyXML::Get_InstancePtr()->Create_Element("Persons");
myDocument->LinkEndChild(RootElement);

BlizmaxTiXmlElement *PersonElement = SaveTinyXML::Get_InstancePtr()->Create_Element("Person");
RootElement->LinkEndChild(PersonElement);
//设置Person元素的属性。
PersonElement->SetAttribute("ID", "1");
//创建name元素、age元素并连接。
BlizmaxTiXmlElement *NameElement = SaveTinyXML::Get_InstancePtr()->Create_Element("name");
BlizmaxTiXmlElement *AgeElement = SaveTinyXML::Get_InstancePtr()->Create_Element("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//设置name元素和age元素的内容并连接。
/*BlizmaxTiXmlText *NameContent = SaveTinyXML::Get_InstancePtr()->Create_Text("周星星");
BlizmaxTiXmlText *AgeContent = SaveTinyXML::Get_InstancePtr()->Create_Text("20");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);*/
//保存到文件
SaveTinyXML::Get_InstancePtr()->Save(pFileName);

}

void Save2(const char* pFileName)
{

BlizmaxTiXmlDocument *myDocument = SaveTinyXML::Get_InstancePtr()->Get_Document();
BlizmaxTiXmlElement *RootElement = SaveTinyXML::Get_InstancePtr()->Create_Element("Persons");
myDocument->LinkEndChild(RootElement);

BlizmaxTiXmlElement *PersonElement = SaveTinyXML::Get_InstancePtr()->Create_Element("Person");
RootElement->LinkEndChild(PersonElement);
//设置Person元素的属性。
PersonElement->SetAttribute("ID", "1");
//创建name元素、age元素并连接。
BlizmaxTiXmlElement *NameElement = SaveTinyXML::Get_InstancePtr()->Create_Element("name");
BlizmaxTiXmlElement *AgeElement = SaveTinyXML::Get_InstancePtr()->Create_Element("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//设置name元素和age元素的内容并连接。
BlizmaxTiXmlText *NameContent = SaveTinyXML::Get_InstancePtr()->Create_Text("周星星");
BlizmaxTiXmlText *AgeContent = SaveTinyXML::Get_InstancePtr()->Create_Text("20");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);
//保存到文件
SaveTinyXML::Get_InstancePtr()->Save(pFileName);

}
int main()
{

Save("c:/Blizmax1.xml");
Save2("c:/Blizmax2.xml");
Save("c:/Blizmax3.xml");



system("Pause");
return 1;
}

你可能感兴趣的:(XML Encapsulation)