做软件的不会c++,都不好意思说自己是搞软件的。最近也开始慢慢学习c++的东西,今天就写写c++如何操作xml文件吧。我们使用的是tinyxml,有个小巧的库,可以生成和解析XML文档。免费开源,可以直接将源码加到项目中,适合多种平台。他的官方文档为http://sourceforge.net/projects/tinyxml/,可以直接从上面下载相关资源。下载好之后添加到VC项目中,下面说说如何把它添加到项目中吧。

第一步,找到我们的项目路径,右击项目,然后如图:

点击“在文件资源管理器中打开文件夹”,然后就可以看到我们项目所在的路径了。

第二步,在项目路径下解压下载好的压缩包

第三步,将其添加到项目中

名字随机去,然后右键该文件

点击现有项,找到刚才解压的路径,全选然后添加就好了

添加之后,应该如图所示

添加到项目之后,就开始对xml进行操作,不多说,直接上代码

example.xml的代码如下:

<?xml version="1,0" encoding="GBK" ?>
<root><host checked="true" station="1001">127.0.0.1</host><client><name>andy</name><id>20190608</id></client>
</root>

aaaa.xml的代码如下

<?xml version="1.0" encoding="GBK" ?>
<root><node><id>1</id><when>2016-1-23 10:00</when><where>吃饭</where><who>Wang</who></node><node><id>2</id><when>2016-1-21 20:00</when><where>看电影</where><who>Jiang</who></node><node><id>3</id><when>2016-1-20 9:00</when><where>去博物馆</where><who>Li</who></node>
</root>

c++的代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#include "../tinyxml/tinyxml.h"
void addChile( TiXmlElement * parent, const char* node, int value);
void addChile( TiXmlElement * parent, const char* node, const char* value);
struct Node
{int id;char when[32];char who[32];char where[32];
};
vector<Node> nodes;
vector<Node> Node_read;
//想容器添加东西
void addNode(int id, const char* when , const char* who , const char* where)
{Node n;n.id = id;strcpy(n.when, when);strcpy(n.who, who);strcpy(n.where, where);nodes.push_back(n);
}
//保存到xml文件中
int save()
{TiXmlDocument xml_doc;//添加声明xml_doc.LinkEndChild(new TiXmlDeclaration("1.0" , "GBK" , ""));//添加根元素TiXmlElement* xml_root = new TiXmlElement("root");xml_doc.LinkEndChild(xml_root);//根元素下面添加节点for (unsigned int i = 0; i < nodes.size(); i++){Node& n = nodes[i];//创建一个节点TiXmlElement* xml_node = new TiXmlElement("node");xml_root->LinkEndChild(xml_node);//创建第一个子节点if (1){addChile(xml_node, "id" , n.id);addChile(xml_node, "when", n.when);addChile(xml_node, "where", n.where);addChile(xml_node, "who", n.who);}}//保存文件xml_doc.SaveFile("aaaa.xml");return 0;
}
//添加子节点
void addChile( TiXmlElement * parent , const char* node , int value)
{//创建节点TiXmlElement* xml_node = new TiXmlElement(node);//将int转为charchar buf[32];sprintf(buf , "%d" , value);xml_node->LinkEndChild(new TiXmlText(buf));parent->LinkEndChild(xml_node);}
void addChile( TiXmlElement * parent, const char* node, const char* value)
{//创建节点TiXmlElement* xml_node = new TiXmlElement(node);//将int转为charxml_node->LinkEndChild(new TiXmlText(value));parent->LinkEndChild(xml_node);
}
//生成xml文件
int test1()
{TiXmlDocument xml_doc;//添加XML声明xml_doc.LinkEndChild(new TiXmlDeclaration("1,0", "GBK", ""));//添加根元素TiXmlElement* xml_root = new TiXmlElement("root");xml_doc.LinkEndChild(xml_root);//在根元素添加其他子元素if (1){//添加hostTiXmlElement* xml_child = new TiXmlElement("host");xml_root->LinkEndChild(xml_child);//添加文档内容xml_child->LinkEndChild(new TiXmlText("127.0.0.1"));//设置属性xml_child->SetAttribute("checked", "true");xml_child->SetAttribute("station", 1001);}//嵌套子元素if (1){TiXmlElement* xml_client = new TiXmlElement("client");xml_root->LinkEndChild(xml_client);TiXmlElement* xml_clientName = new TiXmlElement("name");xml_clientName->LinkEndChild(new TiXmlText("andy"));xml_client->LinkEndChild(xml_clientName);TiXmlElement* xml_clientId = new TiXmlElement("id");xml_clientId->LinkEndChild(new TiXmlText("20190608"));xml_client->LinkEndChild(xml_clientId);//保存文件xml_doc.SaveFile("example.xml");//或者转成stringstring text;text << xml_doc;return 0;}
}//解析xml文件
int test2()
{//解析xmlTiXmlDocument xml_doc;if (!xml_doc.LoadFile("example.xml")){return -1;}//根节点TiXmlElement* xml_root = xml_doc.RootElement();if (xml_root == NULL){return -1;}//获取元素的文本与属性if (1){TiXmlElement* xml_host = xml_root->FirstChildElement("host");const char* text = xml_host->GetText();const char* aCheckedd = xml_host->Attribute("checked");const char* aStation = xml_host->Attribute("station");printf("text:%s , checked:%s , station:%s", text, aCheckedd, aStation);}if (1){TiXmlElement* xml_client = xml_root->FirstChildElement("client");TiXmlElement* xml_name = xml_client->FirstChildElement("name");TiXmlElement* xml_id = xml_client->FirstChildElement("id");}return 0;
}
//解析多个子节点
int test3()
{//开始解析TiXmlDocument xml_doc;if (!xml_doc.LoadFile("aaaa.xml")){return -1;}//获取根元素TiXmlElement* xml_root = xml_doc.RootElement();if (xml_root == NULL){return -1;}TiXmlElement* xml_note = xml_root->FirstChildElement("node");while (xml_note){Node n;//获取他们的值TiXmlElement* xml_id = xml_note->FirstChildElement("id");const char* id = xml_id->GetText();n.id = atoi(id);TiXmlElement* xml_when = xml_note->FirstChildElement("when");strcpy(n.when, xml_when->GetText());TiXmlElement* xml_where = xml_note->FirstChildElement("where");strcpy(n.where, xml_where->GetText());TiXmlElement* xml_who = xml_note->FirstChildElement("who");strcpy(n.who, xml_who->GetText());Node_read.push_back(n);//只想下一个兄弟节点xml_note = xml_note->NextSiblingElement();}}
int main()
{//test1();//addNode(1, "2016-1-23 10:00", "Wang", "吃饭");//addNode(2, "2016-1-21 20:00", "Jiang", "看电影");//addNode(3, "2016-1-20 9:00", "Li", "去博物馆");//save();test3();//遍历vectorfor (int i = 0; i < Node_read.size(); i++){Node n = Node_read[i];printf("id:%d \n, when:%s \n , where:%s \n, who:%s\n" , n.id , n.when , n.where , n.who);}printf("保存成功!\n");return 0;
}

至此,c++操作xml常见的使用方法已完成,请大家多多指教。

c++操作xml文件相关推荐

  1. 写了一个操作XML文件的类

    一个操作XML文件的类..部份功能在完善中~~~~ using System; using System.Collections.Generic; using System.Text; using S ...

  2. c#操作XML文件 1614260503

    c#操作XML文件 1614260503 导入命名空间 using System.Xml; 功能演示 // 实例化文件对象XmlDocument xd = new XmlDocument();// 对 ...

  3. JAVA操作xml文件

    参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...

  4. Qt操作XML文件(创建,读,写,修改,添加,删除)

    XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码 原txt文件内容,在 http://www1.jctrans.com/to ...

  5. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  6. C#实用教程-操作xml文件

    C#实用教程-操作xml文件 C#实用教程-操作xml文件 引言:什么是xml文件 Xml的特征 Xml的格式 与HTML的区别 对Xml进行操作 读取xml文件: 当前xml文件内容如下: 创建xm ...

  7. java操作XML文件--读取内容

          先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类       由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...

  8. BeautifulSoup操作xml文件

    BeautifulSoup操作html的介绍较为常见,可参考官方文档,常见的对xml的操作可以使用ElementTree进行操作,这里并不是介绍BeautifulSoup操作xml,对自己在一次实践中 ...

  9. php操作xml文件,php xml文件操作代码(一)

    创建SimpleXML对象 学习操作xml的朋友可以看看. example.xml文件: $xml = simplexml_load_file('example.xml'); //创建SimpleXM ...

最新文章

  1. 深度学习以及卷积基础
  2. 林园投资体系+嘴巴经济+病从口入+老龄化
  3. pandas 模块学习
  4. 2021年春季学期-信号与系统-第八次作业参考答案-第二小题
  5. postman怎么传session_十几行代码实现分布式 Session
  6. 如何判断两个平面相交_初一数学下册预习第五章 相交线与平行线上
  7. Android华容道之一步一步实现-7-重构代码
  8. css+图标偏移,css background-position 偏移的问题
  9. PMP - 考试将于2011年8月31日更新
  10. 新浪微博之我要看大图插件 v1.3.2.6
  11. 深入浅出mybatis之入门使用
  12. MYSQL多线程插入操作
  13. 【Unity Shaders】Lighting Models —— 灯型号Lit Sphere
  14. python心跳包原理_Python 用心跳(UDP包)探测不活动主机
  15. C 中的左值(Lvalues)和右值(Rvalues)
  16. 数学建模论文分析--2015A高教社杯--太阳影子定位的多目标优化模型
  17. vb.net 教程 3-1 窗体编程基础 1
  18. 阿里云热修复Sophix接入
  19. 系统集成项目管理工程师证有什么用处?
  20. 2021-08-23:启动idea项目时,控制台显示java程序包不存在,解决办法:Error:java xxxx 程序包不存在

热门文章

  1. 计算机科学与技术专业就业前景好吗,计算机科学与技术专业就业前景
  2. 介绍深度卷积神经网络中各种类型的模型
  3. AIX AIO, DIO, CIO
  4. STEMA Python 程序设计组模拟中级15练习试卷第五题(回文数以及判断回文数中是否存在某个数字)
  5. JS数组的slice()方法传负数和字符串操作函数中的slice()、substr()、substring()
  6. 每日一练3.冒泡排序
  7. 调用华为云GES服务业务面API相关参数的获取
  8. arduino灯光装置_Arduino教程中级 项目一 点亮一盏灯
  9. 【每日一题】|楼兰图腾(python解法)
  10. Excel文档生成方案