C++之如何使用tinyxml库读取XML文件
1、下载tinyxml库,这里使用的是tinyxml2_6_2版本。

2、解压tinyxml2_6_2,然后在该目录下找到这六个文件。

3、把这六个文件放在你新建工程main.cpp目录下

4、然后把这六个文件导入vs2013编译器中

5、新建task3.cpp文件

6、把#include"tinystr.h"和#include"tinyxml.h"这两个头文件添加进去

7、把测试代码写入task3.cpp中。
测试代码如下:
#include"tinystr.h"
#include"tinyxml.h"
#include<iostream>
using namespace std;
#define SUCCESS 1
#define FAILED 0
int loadXml();
int main()
{
if (loadXml())
{
getchar(); return 1;
}
getchar();
return 0;
}
int loadXml()
{
//创建两个个xml文档对象,一个为读取,一个为输出
TiXmlDocument *inXml = new TiXmlDocument();
TiXmlDocument *outXml = new TiXmlDocument();
//加载xml文件
if (!inXml->LoadFile("a.xml")) //判断XML文件是否加载成功
{
cerr << inXml->ErrorDesc() << endl;
return 0;
}
//定义根节点,记录xml文件的起始节点
TiXmlElement *inRoot = inXml->FirstChildElement(); //root指向xml文档的第一个节点
inXml->Value();//获取的值为文件名
//定义根节点并连接,将输入的根节点传给输出的根节点
TiXmlElement *outRoot = new TiXmlElement(inRoot->Value());
outXml->LinkEndChild(outRoot);
if (NULL == inRoot) //判断文件是否有内容
{
cerr << "No root element !!!" << endl;
inXml->Clear();
return 0;
}
//循环遍历每个节点
for (TiXmlElement *inElem = inRoot->FirstChildElement(); inElem != NULL; inElem = inElem->NextSiblingElement())
{
TiXmlElement *outElem = new TiXmlElement(inElem->Value());
outRoot->LinkEndChild(outElem);
const char *name = inElem->Value();//获取源文件中子节点的名字
outElem->SetValue(name); //设置目的文件子节点的名字
//获取源文件的属性,设置目标文件的属性
const char *rName = inElem->Attribute("name");
outElem->SetAttribute("name", rName);
const char *rType = inElem->Attribute("type");
outElem->SetAttribute("type", rType);
const char *rSize = inElem->Attribute("size");
outElem->SetAttribute("size", rSize);
const char *rOdd = inElem->Attribute("odd");
outElem->SetAttribute("odd", rOdd);
if (strcmp(name, "0"))//name值是否为空
{
for (TiXmlElement *inChild = inElem->FirstChildElement(); inChild != NULL; inChild = inChild->NextSiblingElement())
{
TiXmlElement *outChild = new TiXmlElement(inChild->Value());
outElem->LinkEndChild(outChild);
const char *cName = inChild->Attribute("name");
outChild->SetAttribute("name", cName);
const char *cType = inChild->Attribute("type");
outChild->SetAttribute("type", cType);
const char *cRatio = inChild->Attribute("ratio");
outChild->SetAttribute("ratio", cRatio);
const char *cLink = inChild->Attribute("link");
outChild->SetAttribute("link", cLink);
}
}
}
outXml->SaveFile("b.xml");
inXml->Clear();
outXml->Clear();
return true;
}

8、在该目录下新建两个xml文件,测试代码的实现功能是:将一个xml文件中的内容复制到另一个xml文件中。然后编译运行即可。
