虽然看起来简单,但开始学习和使用却是不那么简单。
首先从 官网 下载源文件:4个cpp和2个h,然后加入到工程即可。
在你的代码中加上2句:
#include "tinyxml.h"
#include "tinystr.h"
(刚开始只加了tinyxml.h,以为这个头文件包含了tinystr.h,结果编译一大堆问题,其实tinystr.h不一定会包含,它是通过一个宏定义控制的)
(这个tinyxml是跨平台的,所以在windows中用时,如果你的编译器选择了预编译头,那么你要打开4个cpp,在开头加一句#include "stdafx.h")
下面看例子:
void DoMyXml() { TiXmlDocument* doc = new TiXmlDocument(); //最开始我用了一个类,加了一个TiXmlDocument doc;成员变量,结果读取一直错误。所以我就采用了指针,问题就没了。很奇怪? int select = 2; if(select == 1) goto SAVE; else goto READ; SAVE: // Save TiXmlElement* edu = new TiXmlElement("中国大学"); //想象成 树节点 TiXmlElement* dept = new TiXmlElement("计算机专业"); TiXmlElement* cls = new TiXmlElement("三年二班"); doc->LinkEndChild(edu); //使edu成为doc的子节点 edu->LinkEndChild(dept); dept->LinkEndChild(cls); int no[5] = {20001,2000,200,20,2}; char* name[5] = {"古月哥欠5","古月哥欠","古月哥","古月","古"}; for(int i=0; i<5; i++) { TiXmlElement* stu_ = new TiXmlElement("stu"); stu_->SetAttribute("No",no[i]); //属性 TiXmlElement* name_ = new TiXmlElement("Name"); //子节点名字 TiXmlText* text_ = new TiXmlText(name[i]); //子节点内容 name_->LinkEndChild(text_); //把子节点内容关联到子节点中(注意xml语法) stu_->LinkEndChild(name_); cls->LinkEndChild(stu_); } doc->SaveFile("MyTinyXml.xml"); goto END; READ: // Read doc->LoadFile("MyTinyXml.xml"); TiXmlElement* eu = doc->RootElement(); printf_s("%s \n",eu->Value()); TiXmlElement* dt = eu->FirstChildElement(); printf_s("%s \n",dt->Value()); TiXmlElement* cs = dt->FirstChildElement(); printf_s("%s \n",cs->Value()); TiXmlElement* stu = cs->FirstChildElement(); do { const char* attr = stu->Attribute("No"); printf_s("%s \n",attr); TiXmlElement* name_ = stu->FirstChildElement(); printf_s("%s \n",name_->GetText());; stu = stu->NextSiblingElement(); //兄弟节点 } while (stu != NULL); goto END; END: doc->Clear(); delete doc; }
xml:
<中国大学> <计算机专业> <三年二班> <stu No="20001"> <Name>古月哥欠5</Name> </stu> <stu No="2000"> <Name>古月哥欠</Name> </stu> <stu No="200"> <Name>古月哥</Name> </stu> <stu No="20"> <Name>古月</Name> </stu> <stu No="2"> <Name>古</Name> </stu> </三年二班> </计算机专业> </中国大学>