#include <iostream> #include "tinyxml.h" #include "tinystr.h" #include <string> #include <windows.h> #include <atlstr.h> using namespace std; CString GetAppPath() {//获取应用程序根目录 TCHAR modulePath[MAX_PATH]; GetModuleFileName(NULL, modulePath, MAX_PATH); CString strModulePath(modulePath); strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('//'))); return strModulePath; } bool CreateXmlFile(string& szFileName) {//创建xml文件,szFilePath为文件保存的路径,若创建成功返回true,否则false try { //创建一个XML的文档对象。 TiXmlDocument *myDocument = new TiXmlDocument(); //创建一个根元素并连接。 TiXmlElement *RootElement = new TiXmlElement("任务"); myDocument->LinkEndChild(RootElement); //创建一个<任务>元素并连接。 TiXmlElement *ErrandElement = new TiXmlElement("任务ID"); RootElement->LinkEndChild(ErrandElement); //设置Person元素的属性。 ErrandElement->SetAttribute("ID", "1"); //创建name元素、age元素并连接。 TiXmlElement *NameElement = new TiXmlElement("任务名"); TiXmlElement *DepictElement = new TiXmlElement("任务描述"); TiXmlElement *RequirementElement = new TiXmlElement("完成条件"); TiXmlElement *PercentageElement = new TiXmlElement("完成度"); ErrandElement->LinkEndChild(NameElement); ErrandElement->LinkEndChild(DepictElement); ErrandElement->LinkEndChild(RequirementElement); ErrandElement->LinkEndChild(PercentageElement); //设置name元素和age元素的内容并连接。 TiXmlText *NameContent = new TiXmlText("地狱火堡垒"); TiXmlText *DepictContent = new TiXmlText("在地狱火堡垒里有一个火焰系的骑士带了1条火龙,你必须杀掉他才能拯救你的人民"); TiXmlText *RequirementContent = new TiXmlText("杀死最终BOSS火焰系的骑士+1条火龙"); TiXmlText *PercentageContent = new TiXmlText("杀死最终BOSS 0/2"); NameElement->LinkEndChild(NameContent); DepictElement->LinkEndChild(DepictContent); RequirementElement->LinkEndChild(RequirementContent); PercentageElement->LinkEndChild(PercentageContent); //创建第二个Person元素并连接。 TiXmlElement *ErrandElement2 = new TiXmlElement("任务ID"); RootElement->LinkEndChild(ErrandElement2); //设置Person元素的属性。 ErrandElement2->SetAttribute("ID", "2"); //创建name元素、age元素并连接。 TiXmlElement *NameElement2 = new TiXmlElement("任务名"); TiXmlElement *DepictElement2 = new TiXmlElement("任务描述"); TiXmlElement *RequirementElement2 = new TiXmlElement("完成条件"); TiXmlElement *PercentageElement2 = new TiXmlElement("完成度"); ErrandElement2->LinkEndChild(NameElement2); ErrandElement2->LinkEndChild(DepictElement2); ErrandElement2->LinkEndChild(RequirementElement2); ErrandElement2->LinkEndChild(PercentageElement2); //设置name元素和age元素的内容并连接。 TiXmlText *NameContent2 = new TiXmlText("鲜血熔炉"); TiXmlText *DepictContent2 = new TiXmlText("在鲜血熔炉里有一个暗黑系的魔法师带了5个小弟,你必须杀掉他才能拯救你的人民"); TiXmlText *RequirementContent2 = new TiXmlText("杀死最终BOSS暗黑系魔法师"); TiXmlText *PercentageContent2 = new TiXmlText("杀死最终BOSS 0/1"); NameElement2->LinkEndChild(NameContent2); DepictElement2->LinkEndChild(DepictContent2); RequirementElement2->LinkEndChild(RequirementContent2); PercentageElement2->LinkEndChild(PercentageContent2); CString appPath = GetAppPath(); string seperator = "//"; string fullPath = appPath.GetBuffer(0) +seperator+szFileName; myDocument->SaveFile(fullPath.c_str());//保存到文件 } catch (string& e) { return false; } return true; } bool ReadXmlFile(string& szFileName) {//读取Xml文件,并遍历 try { CString appPath = GetAppPath(); string seperator = "//"; string fullPath = appPath.GetBuffer(0) +seperator+szFileName; //创建一个XML的文档对象。 TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str()); myDocument->LoadFile(); //获得根元素,即Persons。 TiXmlElement *RootElement = myDocument->RootElement(); //输出根元素名称,即输出Persons。 cout << RootElement->Value() << endl; //获得第一个Person节点。 TiXmlElement *FirstPerson = RootElement->FirstChildElement(); //获得第一个Person的name节点和age节点和ID属性。 TiXmlElement *NameElement = FirstPerson->FirstChildElement(); TiXmlElement *DepictElement = NameElement->NextSiblingElement(); TiXmlElement *RequirementElement = DepictElement->NextSiblingElement(); TiXmlElement *PercentageElement = RequirementElement->NextSiblingElement(); TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute(); //输出第一个Person的name内容,即周星星;age内容,即;ID属性,即。 cout << NameElement->FirstChild()->Value() << endl; cout << DepictElement->FirstChild()->Value() << endl; cout << RequirementElement->FirstChild()->Value() << endl; cout << PercentageElement->FirstChild()->Value() << endl; cout << IDAttribute->Value()<< endl; //获得第二个Person节点。 TiXmlElement *FirstPerson2 = FirstPerson->NextSiblingElement(); //获得第二个Person的name节点和age节点和ID属性。 TiXmlElement *NameElement2 = FirstPerson2->FirstChildElement(); TiXmlElement *DepictElement2 = NameElement->NextSiblingElement(); TiXmlElement *RequirementElement2 = DepictElement->NextSiblingElement(); TiXmlElement *PercentageElement2 = RequirementElement->NextSiblingElement(); TiXmlAttribute *IDAttribute2 = FirstPerson2->LastAttribute(); //输出第二个Person的name内容,即周星星;age内容,即;ID属性,即。 cout << NameElement2->FirstChild()->Value() << endl; cout << DepictElement2->FirstChild()->Value() << endl; cout << RequirementElement2->FirstChild()->Value() << endl; cout << PercentageElement2->FirstChild()->Value() << endl; cout << IDAttribute2->Value()<< endl; } catch (string& e) { return false; } return true; } int main() { string fileName = "info.xml"; CreateXmlFile(fileName); ReadXmlFile(fileName); }