基于tinyxml类解析XML文档构建数据库
数据表格以XML格式存储在XML文档中,通过tinyxml工具解析XML来读取数据库,然后在MFC可编辑表格中实现数据的添加、删除、查询,最后通过重新组装XML格式文档来保存数据库。
特点:不依赖ACCESS数据库和SQL SEVER等专门的数据库软件即可实现数据库的功能,非常便捷。
工具:tinyxml.h tinystr.h tixml.lib 下载地址:http://download.csdn.net/detail/phnumber/9797808
1.XML数据格式
<RootNode>
<Student num = 1>
<Name>张三</Name>
<Number>123</Number>
</Student>
<Student num = 2>
<Name>李四</Name>
<Number>456</Number>
</Student>
</RootNode>
2.读取XML文档
//从本地工程文件中读取xml格式数据
TiXmlDocument doc;
doc.LoadFile("read.xml");
//读取XML格式数据
TiXmlNode *pRootNode = doc.RootElement();
if (pRootNode)
{
//第一个元素
TiXmlElement *pStudentEle = pRootNode->FirstChildElement();
int i = 0;
CString str;
m_List.DeleteAllItems();
while (pStudentEle)
{
//获得属性
const char *pStudentIDnum = pStudentEle->Attribute("num");
//获得子元素
const char *pStudentName = pStudentEle->FirstChildElement("Name")->GetText();
const char *pStudentNumber = pStudentEle->FirstChildElement("Number")->GetText();
//显示数据
str.Format("%s",pStudentIDnum);
m_List.InsertItem(i,str);
str.Format("%s",pStudentName);
m_List.SetItemText(i,1,str);
str.Format("%s",pStudentNumber);
m_List.SetItemText(i,2,str);
//下一个同层元素
i++;
pStudentEle = pStudentEle->NextSiblingElement();
}
}
3.组装XML文档
CString strXML;
//添加根节点
strXML = "<RootNode>\n";
for ( int i = 0 ; i<m_List.GetItemCount(); i++)
{
strXML = strXML + "<Student num = " + m_List.GetItemText(i,0) + ">\n";
strXML = strXML + "<Name>" + m_List.GetItemText(i,1) + "</Name>\n";
strXML = strXML + "<Number>" + m_List.GetItemText(i,2) + "</Number>\n";
strXML = strXML + "</Student>";
}
strXML += "</RootNode>";
//文件路径
TCHAR szFilter[] = _T("文本文件(*.xml)|*.xml||");
CFileDialog fileDlg(FALSE,_T("doc"),_T("write"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,this);
CString strFilePath = "";
if (IDOK==fileDlg.DoModal())
{
strFilePath = fileDlg.GetPathName();
//保存文件
FILE * fp = fopen(strFilePath,"w");
fprintf(fp,"%s",strXML);
fclose(fp);
}
4.MFC界面示意