c++之TinyXml使用与应用,包含简单的例子

原创 2016年08月31日 15:07:15

使用方法:

使用c++写代码时,发现需要读取一个比较复杂的xml文件,但是感觉Filestorage似乎处理不了,所以采用引入Xml解析库的方式试图解决。其中有很多种。觉得TinyXml比较简单,方便使用(毕竟只是需要读取一下简单类型的xml文件)。于是在网上查了一下使用方法,真的很方便,只要将六个文件添加到工程中就可以了,分别是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。可以在网址中下载到点击打开链接

使用VS进行编写工程的时候,需要在六个文件中添加#include”stdafx.h“ 当使用TinyXml需要引入头文件#include”tinyxml.h“。

使用举例

使用在工程读取的xml文件作为例子吧;xml结构如下所示


解析的代码如下所示:

ImgGraph GraphFusion::loadData(string path){
	ImgGraph graphs;
	TiXmlDocument doc;
	if (!doc.LoadFile(".\\graphs\\0hsv.xml")){
		cout << "Errors come with loading File";
	}
	TiXmlElement* root = doc.FirstChildElement(); 
	if (root == NULL){
		cout << "No root element" << endl;
	}
	TiXmlElement* graph = root->FirstChildElement();//属性为opencv_storage
	TiXmlElement* E_node = graph->FirstChildElement();//属性为graph
	while (E_node){
		string key_str = E_node->GetText();//得到index中的内容,不过是char*类型或者string类型
		//借助stringstream 进行类型转换
		stringstream ss;
		int key;
		ss <<key_str;
		ss >> key;
		E_node = E_node->NextSiblingElement();//下一个兄弟元素,属性为V_Node
		TiXmlElement* E_ImgNode = E_node->FirstChildElement();//得到子元素,ImgNode
		while (E_ImgNode){
			TiXmlElement* E_content = E_ImgNode->FirstChildElement();//得到子元素,Rindex
			stringstream ssnode;
			int index;
			float weight;
			string index_str = E_content->GetText();//得到Rindex中的内容
			//类型转换
			ssnode << index_str;
			ssnode >> index;
			E_content = E_content->NextSiblingElement();//下一个兄弟节点,weight
			string weight_str =E_content->GetText();//得到weight中的内容
			//类型转换
			stringstream ssWeight;
			ssWeight << weight_str;
			ssWeight >> weight;
			//插入到graphs中
			graphs.insertNode(key, ImgNode(index, weight));
			E_ImgNode = E_ImgNode->NextSiblingElement();//继续ImgNode下一个兄弟节点
		}
		E_node = E_node->NextSiblingElement();//继续V_Node 的下一个兄弟节点
	}
	
	return graphs;
}
          刚开始的时候没有怎么看TinyXml文档,一通乱写,后面看了文档,才没有怎么出错。还是要养成看文档的习惯,不然感觉都不会使现成的工具;

写一下,万一哪一天自己又用到了呢


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++中rapidxml用法及例子

rapidxml是一个快速的xml库,比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。      由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml...

tinyxml的用法和实例

使用tinyxml,需要在工程中包含其源码,并在头文件建立引用关系。下面是一个简单的例子,按照层次关系打印出xml文件。...

tinyxml非常好的实例

这个例子对于只想简单使用xml的用户来说,非常有学习价值。 完整程序代码:(相信具有基本C++知识的人可以明白的) #include "string.h"#include "stdio.h"#incl...
  • tulun
  • tulun
  • 2010年05月03日 13:21
  • 3705

cocos2d-x在VS2012环境下编译的异常

cocos2d-x在VS2012环境下编译的异常前言现在电脑的环境是win10 + cocos2d-x2.2.6+vs2012(64位) 因为在Eclipse编译运行游戏项目正常,在VS下是频频出错,...

lua绑定bindings报错 ImportError: No module named yaml

报错:Last login: Tue Aug 12 16:24:23 on ttys000 bjgdxdeiMac:~ bjgdx$ /Users/bjgdx/Documents/WorkSpa...

C++ tinyxml的编译及简单使用方法

1、编译tinyxml        tar -xzvf tinyxml_2_4_0.tar.gz        cd tinyxml       修改makefile,根据具体的开发板提供的GCC修...

TinyXml之简单应用

  • 2012年12月22日 06:57
  • 89KB
  • 下载

C++设计模式——简单工厂模式及具体应用(含例子)

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。   1.静态工厂方法...
  • swqqcs
  • swqqcs
  • 2014年09月08日 17:36
  • 1079

tinyXML使用例子以及教程和文档

  • 2010年05月21日 01:51
  • 390KB
  • 下载

Phinecos(洞庭散人) 专注于开源技术的研究与应用 TinyXML:一个优秀的C++ XML解析器

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++之TinyXml使用与应用,包含简单的例子
举报原因:
原因补充:

(最多只允许输入30个字)