TinyXml下载地址: TinyXML download | SourceForge.net
将压缩包中的 tinystr.cpp , tinystr.h , tinyxml.cpp , tinyxmlerror.cpp , tinyxml.h , tinyxmlparser.cpp 这六个文件放到项目工程中。
代码如下:
#include <iostream>
#include "tinystr.h"
#include "tinyxml.h"
using namespace std;
int CreateXml()
{
// 创建一个xml结构
TiXmlDocument* pDoc = new TiXmlDocument();
TiXmlDeclaration* pDec = new TiXmlDeclaration("1.0", "GB2312", "");
pDoc->LinkEndChild(pDec);
// 创建一个根节点并连接到xml
TiXmlElement* pRoot = new TiXmlElement("item");
pDoc->LinkEndChild(pRoot);
// 创建一个name子节点并连接根节点下
TiXmlElement* nameElement = new TiXmlElement("name");
pRoot->LinkEndChild(nameElement);
nameElement->SetAttribute("ID", "1");
TiXmlText* nameContent = new TiXmlText("opop");
nameElement->LinkEndChild(nameContent);
TiXmlElement* addrElement = new TiXmlElement("addr");
pRoot->LinkEndChild(addrElement);
TiXmlText* addrContent = new TiXmlText("heilongjiang");
addrElement->LinkEndChild(addrContent);
TiXmlElement* telElement = new TiXmlElement("tel");
pRoot->LinkEndChild(telElement);
TiXmlElement* tel_number = new TiXmlElement("Number");
telElement->LinkEndChild(tel_number);
tel_number->SetAttribute("yidong", "123456789");
tel_number->SetAttribute("liantong", "987654321");
TiXmlElement* emailElement = new TiXmlElement("e-mail");
pRoot->LinkEndChild(emailElement);
TiXmlElement* emailContent_qq = new TiXmlElement("QQ");
emailElement->LinkEndChild(emailContent_qq);
TiXmlText* test_qq = new TiXmlText("");
test_qq->SetValue("opop@qq.com");
emailContent_qq->LinkEndChild(test_qq);
TiXmlElement* emailContent_163 = new TiXmlElement("163");
emailElement->LinkEndChild(emailContent_163);
TiXmlText* test_163 = new TiXmlText("");
test_163->SetValue("opop@163.com");
emailContent_163->LinkEndChild(test_163);
pDoc->Print();
pDoc->SaveFile("test.xml");
delete pDoc;
cout<<"write success!!! bye_bye"<<endl;
return 0;
}
int ReadXml()
{
cout<<"read success!!! bye_bye"<<endl;
//创建一个xml结构并载入文件内容
TiXmlDocument* pDoc = new TiXmlDocument();
pDoc->LoadFile("test.xml");
pDoc->Print();
//获取根节点
TiXmlElement* pRoot = pDoc->RootElement();
printf("root = %s\n", pRoot->Value());
//获取根节点下的子节点并打印其内容
TiXmlElement* pFirst = pRoot->FirstChildElement("name");
printf("name = %s\n", pFirst->FirstChild()->ToText()->Value());
printf("ID = %s\n", pFirst->Attribute("ID"));
pFirst = pRoot->FirstChildElement("tel");
TiXmlElement* pSencond = pFirst->FirstChildElement("Number");
printf("yidong = %s\n", pSencond->Attribute("yidong"));
pFirst = pRoot->FirstChildElement("e-mail");
pSencond = pFirst->FirstChildElement("QQ");
printf("QQ = %s\n", pSencond->FirstChild()->ToText()->Value());
delete pDoc;
return 0;
}
int main()
{
cout << "Hello World!" << endl;
CreateXml();
cout<<endl<<endl<<endl<<endl<<endl;
ReadXml();
return 0;
}
说明:上面会出现readXml时LoadFile不全的情况,因为存文件时数字163少了右边部分,所以节点不要写数字。
更新一版程序
#include <iostream>
#include "tinystr.h"
#include "tinyxml.h"
using namespace std;
int CreateXml()
{
// 创建一个xml结构
TiXmlDocument* pDoc = new TiXmlDocument();
TiXmlDeclaration* pDec = new TiXmlDeclaration("1.0", "GB2312", "");
pDoc->LinkEndChild(pDec);
// 创建一个根节点并连接到xml
TiXmlElement* pRoot = new TiXmlElement("item");
pDoc->LinkEndChild(pRoot);
// 创建一个name子节点并连接根节点下
TiXmlElement* nameElement = new TiXmlElement("name");
pRoot->LinkEndChild(nameElement);
nameElement->SetAttribute("ID", "1");
TiXmlText* nameContent = new TiXmlText("opop");
nameElement->LinkEndChild(nameContent);
TiXmlElement* addrElement = new TiXmlElement("addr");
pRoot->LinkEndChild(addrElement);
TiXmlText* addrContent = new TiXmlText("heilongjiang");
addrElement->LinkEndChild(addrContent);
TiXmlElement* telElement = new TiXmlElement("tel");
pRoot->LinkEndChild(telElement);
TiXmlElement* tel_number = new TiXmlElement("Number");
telElement->LinkEndChild(tel_number);
tel_number->SetAttribute("yidong", "123456789");
tel_number->SetAttribute("liantong", "987654321");
TiXmlElement* emailElement = new TiXmlElement("e-mail");
pRoot->LinkEndChild(emailElement);
TiXmlElement* emailContent_163 = new TiXmlElement("e-mail:163");
emailElement->LinkEndChild(emailContent_163);
TiXmlText* test_163 = new TiXmlText("");
test_163->SetValue("opop@163.com");
emailContent_163->LinkEndChild(test_163);
TiXmlElement* emailContent_qq = new TiXmlElement("e-mail:QQ");
emailElement->LinkEndChild(emailContent_qq);
TiXmlText* test_qq = new TiXmlText("");
test_qq->SetValue("opop@qq.com");
emailContent_qq->LinkEndChild(test_qq);
pDoc->Print();
pDoc->SaveFile("test.xml");
delete pDoc;
cout<<"write success!!! bye_bye"<<endl;
return 0;
}
int ReadXml()
{
cout<<"read success!!! bye_bye"<<endl;
//创建一个xml结构并载入文件内容
TiXmlDocument* pDoc = new TiXmlDocument();
pDoc->LoadFile("test.xml");
pDoc->Print();
//获取根节点
TiXmlElement* pRoot = pDoc->RootElement();
printf("root = %s\n", pRoot->Value());
//获取根节点下的子节点并打印其内容
TiXmlElement* pFirst = pRoot->FirstChildElement();//读取第一条
printf("element = %s\n", pFirst->Value());
printf("name = %s\n", pFirst->FirstChild()->Value());
printf("ID = %s\n", pFirst->Attribute("ID"));
pFirst = pFirst->NextSiblingElement();//读取刚才那条的下一个
printf("element = %s\n", pFirst->Value());
printf("name = %s\n", pFirst->FirstChild()->Value());
pFirst = pFirst->NextSiblingElement();
TiXmlElement* pSencond = pFirst->FirstChildElement("Number");
printf("yidong = %s\n", pSencond->Attribute("yidong"));
pFirst = (TiXmlElement*)pRoot->IterateChildren("e-mail", NULL);//查找想要读取的这一条
pSencond = pFirst->FirstChildElement();
printf("163 = %s\n", pSencond->FirstChild()->Value());
// pSencond = pSencond->NextSiblingElement();
// printf("QQ = %s\n", pSencond->FirstChild()->Value());
printf("QQ = %s\n", pSencond->NextSibling()->FirstChild()->Value());
delete pDoc;
return 0;
}
int main()
{
cout << "Hello World!" << endl;
CreateXml();
cout<<endl<<endl<<endl<<endl<<endl;
ReadXml();
return 0;
}
运行结果截图: