TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏
TinyXML2是simple、small、efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http://download.csdn.net/detail/k346k346/8500915,或者到官网下载:https://github.com/leethomason/tinyxml2。
使用方法:将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含#include "tinyxml2.h"和using namespace
tinyxml2;
1.创建XML文件。注意:xml文件必须先创建,可由fopen()进行创建,再交由XMLDocument进行写入操作。
int createTinyXML2(string xmlPath)
{
FILE* fp=NULL;
fp=fopen(xmlPath.c_str(),"w+");//创建空xml文件
fclose(fp);
XMLDocument doc;
doc.LoadFile(xmlPath);//载入xml文件
XMLDeclaration* declaration=doc.NewDeclaration();//添加xml文件头申明
doc.InsertFirstChild(declaration);
XMLElement *Root = doc.NewElement("Root");
doc.InsertEndChild(Root);
//insert Head
XMLElement* Head=doc.NewElement("Head");
Root->InsertEndChild(Head);
//insert Create_Time
time_t rawtime;//time_t为long型
time(&rawtime);//获取从1970.1.1起的秒数
struct tm *temp = localtime(&rawtime);
char time_str[32];
sprintf(time_str, "%04d-%02d-%02d %02d:%02d:%02d", temp->tm_year + 1900, temp->tm_mon + 1, temp->tm_mday,\
temp->tm_hour, temp->tm_min, temp->tm_sec);
XMLElement* Create_Time = doc.NewElement("Create_Time");
Create_Time->InsertFirstChild(doc.NewText(time_str));
Head->InsertEndChild(Create_Time);
//insert Algorithm
XMLElement* Algorithm = doc.NewElement("Algorithm");
Algorithm->InsertFirstChild(doc.NewText("MD5"));
Algorithm->SetAttribute("ID",1);
Head->InsertEndChild(Algorithm);
//insert cipher_Num
XMLElement* Cipher_Num = doc.NewElement("Cipher_Num");
Cipher_Num->InsertFirstChild(doc.NewText("500"));
Cipher_Num->SetAttribute("ID",2);
Head->InsertEndChild(Cipher_Num);
int targetNum=3;
while (targetNum)
{
//insert Target
Root->InsertEndChild(doc.NewElement("Target"));
XMLElement* Target = Root->LastChildElement("Target");
//insert HashValue to Target Node
XMLElement* HashValue = doc.NewElement("HashValue");
HashValue->InsertFirstChild(doc.NewText("5555"));
Target->InsertEndChild(HashValue);
//insert Salt to Target Node
XMLElement* Salt = doc.NewElement("Salt");
Salt->InsertFirstChild(doc.NewText("555"));
Target->InsertEndChild(Salt);
targetNum--;
}
int result=doc.SaveFile(xmlPath.c_str());
return result;
}
结果截图:
2.读取XML文件
int readTinyXML2(string xmlPath){XMLDocument doc;doc.LoadFile(xmlPath.c_str());if(doc.Error()){cout<<"Read "<<xmlPath<<" file failed! "<<endl;return -1;}XMLElement *root = doc.RootElement();XMLElement *Head=root->FirstChildElement("Head");XMLElement *HeadChildNode=Head->FirstChildElement("Create_Time");string Create_Time=HeadChildNode->GetText();HeadChildNode=Head->FirstChildElement("Algorithm");string Algorithm=HeadChildNode->GetText();string AlgorithmID=HeadChildNode->Attribute("ID");HeadChildNode=Head->FirstChildElement("Cipher_Num");string Cipher_Num=HeadChildNode->GetText();string Cipher_NumID=HeadChildNode->Attribute("ID");XMLElement *Target=root->FirstChildElement("Target");XMLElement *TargetChildNode=NULL;int targetNum=3;char hash[3][32]={NULL};char salt[3][32]={NULL};for(int i=0;i<targetNum;i++){TargetChildNode=Target->FirstChildElement("HashValue");strcpy(hash[i],TargetChildNode->GetText());TargetChildNode=Target->FirstChildElement("Salt");strcpy(salt[i],TargetChildNode->GetText());Target=Target->NextSiblingElement("Target");}//verify the read result from xmlstd::cout<<"Create_Time:"<<Create_Time<<endl;std::cout<<"Algorithm:"<<Algorithm<<" ID:"<<AlgorithmID<<endl;std::cout<<"Cipher_Num:"<<Cipher_Num<<" ID:"<<Cipher_NumID<<endl;for(int i=0;i<targetNum;i++){std::cout<<"hash["<<i<<"]:"<<hash[i]<<endl;std::cout<<"salt["<<i<<"]:"<<salt[i]<<endl;}return 0;}读取结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏的更多相关文章
- 给EditText的drawableRight属性的图片设置点击事件 分类: 学习笔记 android 2015-07-06 13:20 134人阅读 评论(0) 收藏
这个方法是通用的,不仅仅适用于EditText,也适用于TextView.AutoCompleteTextView等控件. Google官方API并没有给出一个直接的方法用来设置右边图片的点击事件,所 ...
- Eclipse 快捷键大全 分类: C_OHTERS 2014-06-01 13:05 332人阅读 评论(0) 收藏
精选常用: 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如a ...
- android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏
android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一 ...
- Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏
Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...
- 随机带权选取文件中一行 分类: linux c/c++ 2014-06-02 00:11 344人阅读 评论(0) 收藏
本程序实现从文件中随即选取一行,每行被选中的概率与改行长度成正比. 程序用一次遍历,实现带权随机选取. 算法:假设第i行权重wi(i=1...n).读取到文件第i行时,以概率wi/(w1+w2+... ...
- AndroidManifest.xml中的application中的name属性 分类: android 学习笔记 2015-07-17 16:51 116人阅读 评论(0) 收藏
被这个不起眼的属性折磨了一天,终于解决了. 由于项目需要,要合并两个android应用,于是拷代码,拷布局文件,拷values,所有的都搞定之后程序还是频频崩溃,一直没有找到原因,学android时间 ...
- JavaScript、Ajax与jQuery的关系 分类: C1_HTML/JS/JQUERY 2014-07-31 10:15 3388人阅读 评论(0) 收藏
简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装 ...
- .net 实现Office文件预览 Word PPT Excel 2015-01-23 08:47 63人阅读 评论(0) 收藏
先打个广告: .Net交流群:252713569 本人QQ :524808775 欢迎技术探讨, 近期公司要求上传的PPT和Word都需要可以在线预览.. 小弟我是从来没有接触过这一块的东西 感觉很棘 ...
- XHTML 结构化:使用 XHTML 重构网站 分类: C1_HTML/JS/JQUERY 2014-07-31 15:58 249人阅读 评论(0) 收藏
http://www.w3school.com.cn/xhtml/xhtml_structural_01.asp 我们曾经为本节撰写的标题是:"XHTML : 简单的规则,容易的方针.&qu ...
随机推荐
- 手机app常见bug积累
经过一年的测试工作,以下是手机APP比较容易出现的错误.之后如果发现了还会继续添加,修改.1.翻页手机客户端,内容超过一页时,上拉加载更多内容,加载错误(容易出现数据重复,图片和文章不匹配,图片重复加 ...
- hadoop的RPC通信
RPC(remote procedure call)远程调用 不同的Java进程间的对象方法调用 一方称作服务端(server),一方称作客户端(client) server端提供对象,供客户端调用, ...
- java基础-006
37.JDBC JDBC是允许用户在不同数据库之间做选择的一个抽象层.JDBC允许开发者用JAVA写数据库引用程序,而不需要关心底层特定数据库的细节. 38.驱动(Driver) 在JDBC中的角色 ...
- Sublime Text2 jedi插件离线安装
1.Sublime Text2 下载安装 2.下载jedi gitbub上的,https://github.com/srusskih/SublimeJEDI 3.打开sublime后,组合键“c ...
- Titanium vs PhoneGap
http://mobile.51cto.com/Titanium-318049.htm http://www.ibm.com/developerworks/cn/opensource/os-titan ...
- JSP如何在servlet将一个数据模型对象传递给jsp页面
在servlet把对象放到request里,然后jsp里直接通过request取值如 在servlet:(简写了)public void doGet(request,response){UserInf ...
- JS判断移动设备最佳方法 并实现跳转至手机版网页
我在开发的Magento或Wordpress主题时,通过都会制作手机版本,为了实现某个片段在手机端和桌面端不同功能,又或者如果是手机设备,就跳转到指定的网页上,那么这里就需要用到JS来做判断了,下面有 ...
- BZOJ 1486 最小圈
二分答案是显然的,我们需要dfs版spfa判一下负环. 看起来是n^2其实很快. #include<iostream> #include<cstdio> #include< ...
- UVA11624(bfs)
题意:给一张图,有火源,有障碍物,剩下的是道路,火源在下一分钟能够让上下左右四个方向的道路也着火,告诉人的位置,问最短时间能逃出去的时间是多少: 思路:一个bfs用来求出所有的火源能蔓延到的地方,另一 ...
- iOS:测试机添加
一,首先打开开发者首页:https://developer.apple.com/,点击Member Center二,点击certificates,Identifiers & Profiles三 ...