tinyxml读写xml示例代码

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

如下是一个XML片段:

   <Persons>
        <Person ID=”1″>
            <name>周星星</name>
            <age>20</age>
        </Person>
        <Person ID=”2″>
            <name>白晶晶</name>
            <age>18</age>
        </Person>
    </Persons>

在TinyXML中,根据XML的各种元素来定义了一些类:

TiXmlBase:整个TinyXML模型的基类。

TiXmlAttribute:对应于XML中的元素的属性。

TiXmlNode:对应于DOM结构中的节点。

TiXmlComment:对应于XML中的注释

TiXmlDeclaration:对应于XML中的申明部分,即<?versiong=”1.0″ ?>。

TiXmlDocument:对应于XML的整个文档。

TiXmlElement:对应于XML的元素。

TiXmlText:对应于XML的文字部分

TiXmlUnknown:对应于XML的未知部分。

TiXmlHandler:定义了针对XML的一些操作。

TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。

tinyxml组件读写XML非常方便,相比boost更加轻便。

下面是xml读写的模版文件

<?xml version="1.0" encoding="utf-8" standalone="yes" ?><savemaplist>
    <map mapid="1" name="Dota版本 v8.w3x" filename="Dota_V7.8.w3x" md5="90498B2406383B72B29D18B4DF62DC37" />
    <map mapid="2" name="Dota版本 v9.w3x" filename="Dota_V1.8.w3x" md5="91498B2406383B72B29D18B4DF62DC37" />
    <map mapid="3" name="Dota版本 v11.w3x" filename="Dota_V2.8.w3x" md5="91498B2406383B72B29D18B4DF62DC37" /></savemaplist>

读写代码

void				writeMapXmlData(){
	//save when quit
	TiXmlDocument xmlDoc;
	TiXmlDeclaration Declaration("1.0","utf-8","yes");
	xmlDoc.InsertEndChild(Declaration);

	TiXmlNode *pNode=NULL;
	TiXmlElement *pRootElm=new TiXmlElement("savemaplist");
	pNode=xmlDoc.InsertEndChild(*pRootElm);
	pRootElm=pNode->ToElement();

	TiXmlElement *pChildElm=new TiXmlElement("map");
	for(int i=0;i<m_rpgMapData_.size();++i){
		std::string u8node;
		pChildElm->SetAttribute("mapid",m_rpgMapData_.at(i).mapid);
		common::Base_W2U8(m_rpgMapData_.at(i).showmapname,u8node);
		pChildElm->SetAttribute("name",u8node.c_str());
		common::Base_W2U8(m_rpgMapData_.at(i).savename,u8node);
		pChildElm->SetAttribute("filename",u8node.c_str());
		pChildElm->SetAttribute("md5",m_rpgMapData_.at(i).md5.c_str());
		pNode=pRootElm->InsertEndChild(*pChildElm);
	}

	xmlDoc.SaveFile(L"config\\rpgmapd.xml");}
void				initReadRpgMapXmlData(){
	m_rpgMapData_.clear();
	std::vector<rpgMapData>().swap(m_rpgMapData_);
	//first ,read xml file
	TiXmlDocument xmlStr;
	if(FALSE == xmlStr.LoadFile(_TEXT("config\\rpgmapd.xml"), TIXML_ENCODING_UTF8))
	{
		QB_error("公告信息格式错误");
		return;
	}
	//	m_vecItem.clear();
	TiXmlElement* root = xmlStr.RootElement();   //TeamNews root
	if (root)
	{
		TiXmlElement*  firstNews = root->FirstChildElement(); 
		while(firstNews){
			rpgMapData item;
			std::string filename;
			filename=firstNews->Attribute("mapid");
			item.mapid	= atoi(filename.c_str());
			filename=firstNews->Attribute("name");
			common::Base_U82W(filename,item.showmapname);
			filename=firstNews->Attribute("filename");
			common::Base_U82W(filename,item.savename);
			item.md5=firstNews->Attribute("md5");
			item.haddownload=false;
			m_rpgMapData_.push_back(item);
			firstNews=firstNews->NextSiblingElement();
		}
	}
	}

一些所需的类型

struct rpgMapData{
	int mapid;
	std::string md5;
	std::wstring showmapname;		//显示的名称
	std::wstring	savename;				//存盘名称
	bool haddownload;
	rpgMapData(){
		mapid=0;
		md5 = "";
		showmapname  = L"";
		haddownload = false;
	}
	rpgMapData(int v):mapid(v) {
		md5 = "";
		showmapname  = L"";
		haddownload = false;
	}

	bool operator == (const rpgMapData& _R) const{
		return mapid == _R.mapid;
	}};

tinyxml读写xml示例代码

tinyxml读写xml示例代码

tinyxml读写xml示例代码

时间: 2024-10-09 01:11:26

tinyxml读写xml示例代码的相关文章

C++通过TinyXML类库读写XML文件

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系. 使用之前,需要先下载TinyXML类库:http://download.csdn.net/detail/tennysonsky.也可在sourceforge上下载

在.net中序列化读写xml方法的总结

在.net中序列化读写xml方法的总结 阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数组的做为数据成员的序列化 类型继承与反序列化 反序列化的实战演练 反序列化的使用总结 排除不需要序列化的成员 强制指定成员的序列化顺序 自定义序列化行为 序列化去掉XML命名空间及声明头 XML的使用建议 XML是一种很常见的数据保存方式,我经常用它来保存一些

C#_在.net中序列化读写xml方法的总结

阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数组的做为数据成员的序列化 类型继承与反序列化 反序列化的实战演练 反序列化的使用总结 排除不需要序列化的成员 强制指定成员的序列化顺序 自定义序列化行为 序列化去掉XML命名空间及声明头 XML的使用建议 XML是一种很常见的数据保存方式,我经常用它来保存一些数据,或者是一些配置参数. 使用C#,我

android 读写文件示例

(1)程序说明 代码中的两个按钮处理事件,分别进行了文本的读写操作. 1)文件写操作 首先调用Activity的openFileOutPut()方法获得文本文件的输出流,第一个参数为文本文件的名字,第二个为文件的打开方式 接着调用Outputstream对象的write()方法将Textview中获得文本信息写入outputstream对象,最后调用close()方法完成写入操作. 2)文件读操作 首先调用Activity的openFileInPut()方法获得文本文件的输入流, 接着调用输入流

C/C++ 开源库及示例代码

C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1.3 环形缓冲 2.1.4 多维数组 2.1.5 图 2.2 对容器的操作 2.3 字符串处理 2.3.1 字符集 2.3.2 字符串格式化 2.3.3 正则表达式 2.3.4 (其它) 2.4 内存相关 2.4.1 智能指针 2.4.2 内存池 2.5 时间 & 日期 2.6 编码 & 解码

(转)在.net中序列化读写xml方法的总结

阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数组的做为数据成员的序列化 类型继承与反序列化 反序列化的实战演练 反序列化的使用总结 排除不需要序列化的成员 强制指定成员的序列化顺序 自定义序列化行为 序列化去掉XML命名空间及声明头 XML的使用建议 XML是一种很常见的数据保存方式,我经常用它来保存一些数据,或者是一些配置参数. 使用C#,我

使用TinyXML进行XML操作

本例基于TinyXML实现XML的自动解析和创建,由于本人是菜鸟刚入门,例子中添加了enum.struct.vector.map.list的常见用法,首先添加6个tinyxml工程文件,然后设置调试参数. XML文档如下: 代码如下: AutoAnalysisCreateTinyXML.h AutoAnalysisCreateTinyXML.cpp AutoMain.cpp

ant中提取properties和xml提高代码复用性

本文接着上文对前面的示例进行优化,在前面的build.xml中,有些代码是重复的,我们可以将其抽象出来拿来共同使用,比如将一些路劲提取出来放入properties,可以达到共用的同时,还可以增强程序的可维护性,以后路劲变了只需改配置文件,不用改动build.xml.properties维护简单,以键值对形式存放:而xml不单可以提取属性,还可以提取target. 比如在上文中可以将src1,src2,src3的路劲提取出来,放入properties,以后要是路劲变了,直接更改properties

AD帐户操作C#示例代码(一)——导入用户信息

最近写了一个AD帐户导入的小工具(为啥写作“帐”户呢?),跟大家分享下相关代码,欢迎各位高手指教! 首先,我准备一个这样的Excel文件作为导入模版,并添加了一些测试数据. 然后,我打开Visual Studio 2012,新建一个Windows窗体应用程序.在主窗体界面,我放了一些Label.TextBox.Button控件,还有一个ProgressBar. 开始写代码.首先写从Excel里读取数据的方法. private static async Task<DataTable> GetTa