Tinyxml的简单应用
参考文章: 1-> http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html
2-> http://blog.csdn.net/clever101/article/details/5334369
在日常开发过程中,常常需要用到xml文件的读写,tinyxml是一款轻量级的xml开源库,对于诸如程序配置,账单记录等常见的xml文件读写,tinyxml完全可以胜任.
1->代码下载:http://sourceforge.net/projects/tinyxml/
2->编译
解压下载包,用VS2010打开 tinyxml.sln 解决方案,里面共有四个工程,编译第一个工程 tinyxml ,生成 tinyxml.lib 静态库文件,我们所需要用到的就是 tinyxml.h 和 tinyxml.lib .
3->测试
新建工程,添加tinyxml.h头文件和tinyxml.lib静态库,我们就可以对xml文件进行都写了,以下是测试代码.
#include <iostream> #include <string> #include "tinystr.h" #include "tinyxml.h" using namespace std; #define ASSERT_P(v,s,r) do{if(v==s)return r;} while(0); bool CreateFile(const char* szFileName) { // 创建文档对象 TiXmlDocument *pDocument = new TiXmlDocument(); ASSERT_P(pDocument,NULL,false); // 创建根元素,连接到pDocument TiXmlElement *pConfigElement = new TiXmlElement("config"); ASSERT_P(pConfigElement,NULL,false); pDocument->LinkEndChild(pConfigElement); // 创建一个common元素,连接到config下 TiXmlElement *pCommonElement = new TiXmlElement("common"); ASSERT_P(pCommonElement,NULL,false); // 为common元素设置属性(key,value) pCommonElement->SetAttribute("zoneid","1001"); pCommonElement->SetAttribute("platid","1"); pConfigElement->LinkEndChild(pCommonElement); // 添加zone元素 int nZoneCnt = 10; TiXmlElement *pZoneListElement = new TiXmlElement("zonelist"); ASSERT_P(pZoneListElement,NULL,false); pZoneListElement->SetAttribute("zonecount",10); pConfigElement->LinkEndChild(pZoneListElement); for(int i=0;i<10;i++) { char szName[50]; TiXmlElement *pZoneElement = new TiXmlElement("zone"); sprintf(szName,"zone_%02d",i+1); pZoneElement->SetAttribute("name",szName); pZoneListElement->LinkEndChild(pZoneElement); } return pDocument->SaveFile(szFileName); } bool ReadFile(const char *szFileName) { // 加载文件 TiXmlDocument *pDocument = new TiXmlDocument(szFileName); ASSERT_P(pDocument,NULL,false); pDocument->LoadFile(); // 获得,并输出根元素 TiXmlElement *pConfigElement = pDocument->RootElement(); cout<<pConfigElement->Value()<<endl; // 获取config的第一个子元素 TiXmlElement *pCommonElement = pConfigElement->FirstChildElement(); // or TiXmlElement *pCommonElement = pConfigElement->FirstChildElement("common"); ASSERT_P(pCommonElement,NULL,false); cout<<"\tzoneid="<<pCommonElement->Attribute("zoneid")<<",platid="<<pCommonElement->Attribute("platid")<<endl; // 第二个子元素 TiXmlElement *pZoneListElement = pConfigElement->FirstChildElement("zonelist"); ASSERT_P(pZoneListElement,NULL,false); int nZoneCount = atoi(pZoneListElement->Attribute("zonecount")); TiXmlElement *pZoneElement = pZoneListElement->FirstChildElement(); for(int i=0;i<nZoneCount;i++) { ASSERT_P(pZoneElement,NULL,false); cout<<"\t\tname="<<pZoneElement->Attribute("name")<<endl; pZoneElement = pZoneElement->NextSiblingElement(); } return true; } int main() { const char *szFileName = "./config.xml"; CreateFile(szFileName); ReadFile(szFileName); system("pause"); return 0; }