tinyxml2创建、读取、修改文件通用操作
#include "../TinyXML2/tinyxml2.h"
int test_tinyxml2_create()
{
const char* declaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
tinyxml2::XMLDocument doc;
tinyxml2::XMLError ret = doc.Parse(declaration);
if (ret != 0) {
fprintf(stderr, "fail to parse xml file: %s\n", declaration);
return -1;
}
tinyxml2::XMLComment* comment = doc.NewComment("this is a xml test file");
doc.InsertEndChild(comment);
tinyxml2::XMLElement* root = doc.NewElement("Root");
doc.InsertEndChild(root);
// User
tinyxml2::XMLElement* user = doc.NewElement("User");
user->SetAttribute("Name", "fengbingchun");
root->InsertEndChild(user);
tinyxml2::XMLElement* blog = doc.NewElement("Blog");
tinyxml2::XMLText* text1 = doc.NewText("CSDN");
blog->InsertEndChild(text1);
user->InsertEndChild(blog);
tinyxml2::XMLElement* code = doc.NewElement("Code");
tinyxml2::XMLText* text2 = doc.NewText("GitHub");
code->InsertEndChild(text2);
user->InsertEndChild(code);
// Blog
tinyxml2::XMLElement* blog2 = doc.NewElement("Blog");
blog2->SetAttribute("Name", "CSDN");
root->InsertEndChild(blog2);
tinyxml2::XMLElement* addr = doc.NewElement("Address");
tinyxml2::XMLText* text3 = doc.NewText("https://blog.csdn.net/fengbingchun");
addr->InsertEndChild(text3);
blog2->InsertEndChild(addr);
tinyxml2::XMLElement* id = doc.NewElement("ID");
tinyxml2::XMLText* text4 = doc.NewText("fengbingchun");
id->InsertEndChild(text4);
blog2->InsertEndChild(id);
// Code
tinyxml2::XMLElement* code2 = doc.NewElement("Code");
code2->SetAttribute("Name", "GitHub");
root->InsertEndChild(code2);
tinyxml2::XMLElement* addr2 = doc.NewElement("Address");
tinyxml2::XMLText* text5 = doc.NewText("https://github.com//fengbingchun");
addr2->InsertEndChild(text5);
code2->InsertEndChild(addr2);
tinyxml2::XMLElement* repositories = doc.NewElement("Repositories");
tinyxml2::XMLText* text6 = doc.NewText("27");
repositories->InsertEndChild(text6);
code2->InsertEndChild(repositories);
#ifdef _MSC_VER
const char* file_name = "C:/Log/test.xml";
#else
const char* file_name = "testdata/test.xml";
#endif
ret = doc.SaveFile(file_name);
if (ret != 0) {
fprintf(stderr, "fail to save xml file: %s\n", file_name);
return -1;
}
return 0;
}
int test_tinyxml2_parse()
{
#ifdef _MSC_VER
const char* file_name = "C:/Log/test_tinyxml2.xml";
#else
const char* file_name = "testdata/test_tinyxml2.xml";
#endif
tinyxml2::XMLDocument doc;
tinyxml2::XMLError ret = doc.LoadFile(file_name);
if (ret != 0) {
fprintf(stderr, "fail to load xml file: %s\n", file_name);
return -1;
}
tinyxml2::XMLElement* root = doc.RootElement();
fprintf(stdout, "root element name: %s\n", root->Name());
// User
tinyxml2::XMLElement* user = root->FirstChildElement("User");
if (!user) {
fprintf(stderr, "no child element: User\n");
return -1;
}
fprintf(stdout, "user name: %s\n", user->Attribute("Name"));
tinyxml2::XMLElement* blog = user->FirstChildElement("Blog");
if (!blog) {
fprintf(stderr, "no child element: Blog, in User\n");
return -1;
}
fprintf(stdout, "blog value: %s\n", blog->GetText());
fprintf(stdout, "code value: %s\n\n", user->FirstChildElement("Code")->GetText());
// Blog
tinyxml2::XMLElement* blog2 = root->FirstChildElement("Blog");
if (!blog2) {
fprintf(stderr, "no child element: Blog\n");
return -1;
}
fprintf(stdout, "blog name: %s\n", blog2->Attribute("Name"));
tinyxml2::XMLElement* addr = blog2->FirstChildElement("Address");
if (!addr) {
fprintf(stderr, "no child element: Address, in Blog\n");
return -1;
}
fprintf(stdout, "address value: %s\n", addr->GetText());
fprintf(stdout, "id value: %s\n\n", blog2->FirstChildElement("ID")->GetText());
// Code
tinyxml2::XMLElement* code = root->FirstChildElement("Code");
if (!code) {
fprintf(stderr, "no child element: Code\n");
return -1;
}
fprintf(stdout, "code name: %s\n", code->Attribute("Name"));
tinyxml2::XMLElement* addr2 = code->FirstChildElement("Address");
if (!addr2) {
fprintf(stderr, "no child element: Address, in Code\n");
return -1;
}
fprintf(stdout, "address value: %s\n", addr2->GetText());
fprintf(stdout, "repositories value: %s\n\n", code->FirstChildElement("Repositories")->GetText());
return 0;
}
int test_tinyxml2_Modify()
{
#ifdef _MSC_VER
const char* file_name = "C:/Log/test_tinyxml2.xml";
#else
const char* file_name = "testdata/test_tinyxml2.xml";
#endif
tinyxml2::XMLDocument doc;
tinyxml2::XMLError ret = doc.LoadFile(file_name);
if (ret != 0) {
fprintf(stderr, "fail to load xml file: %s\n", file_name);
return -1;
}
tinyxml2::XMLElement* root = doc.RootElement();
fprintf(stdout, "root element name: %s\n", root->Name());
// User
tinyxml2::XMLElement* user = root->FirstChildElement("User");
if (!user) {
fprintf(stderr, "no child element: User\n");
return -1;
}
user->SetAttribute("Age", 20);
user->SetAttribute("Name", "ABCD");
tinyxml2::XMLElement* blog = user->FirstChildElement("Blog");
if (!blog) {
fprintf(stderr, "no child element: Blog, in User\n");
return -1;
}
if (0 == strcmp("CSDN", blog->GetText()))
{
blog->SetText("csdn2");
}
doc.SaveFile(file_name);
return 0;
}
int main()
{
test_tinyxml2_create();
test_tinyxml2_parse();
test_tinyxml2_Modify();
}
tinyxml2创建、读取、修改文件通用操作相关推荐
- 使用tinyxml2.h读取xml文件并匹配文件中的值
文章目录 前言 一.tinyxml2是什么? 二.使用步骤 1.xml文件 1.引入库 2.读入数据 附件 前言 `提示:使用tinyxml2.h读取xml文件并匹配文件中的值,需要导入#includ ...
- 使用vi/vim创建or修改文件的流程(最基本)
一.vi.vim的三种工作模式及功能 命令模式:阅读.查找.复制粘贴 输入模式:录入文字 末行模式:保存.退出 二.工作模式之间的切换 i键:按i键可以从命令模式切换到输入模式 Esc键:按Esc键可 ...
- java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作
import org.apache.commons.lang.StringUtils; import java.io.*; import java.util.HashMap; import java. ...
- Android心得4.1--文件的保存与读取及文件的操作模式详解.doc
一.保存到手机内存 1. 很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: l 文件(采用IO数据流的方式) l Sh ...
- OS模块--批量修改文件名字(一)创建和修改文件路径
OS模块:在程序中,经常需要对大量文件和路径进行操作,比如:查询某一路径下同种类型文件,批量修改文件名字等.OS模块提供了非常丰富得方法用来处理文件和目录. 一.常用OS模块列表 二.OS模块创建文件 ...
- Linux中批量创建空白文件,在Linux中批量创建和修改文件或目录
1. 用一条命令直接创建 [fred@Royalmile Auto_Ops]$ touch `seq 10` [fred@Royalmile Auto_Ops]$ ls 1 10 2 3 4 ...
- linux 快速建文件目录,在Linux中批量创建和修改文件或目录
1. 用一条命令直接创建[fred@Royalmile Auto_Ops]$ touch `seq 10` [fred@Royalmile Auto_Ops]$ ls 1 10 2 3 4 ...
- python创建一个csv文件_python操作csv文件
1 importcsv2 data =[3 #使用数字和字符串的数字都可以 4 ("ken","mafe",23),5 ("Tame",&q ...
- 关于MFC中读取EXCEL文件的操作
转自:点击打开链接 .h文件的源码代码如下: 其中的头文件都是OLE的头文件.如何导出可以参考 http://blog.csdn.net/wyz365889/article/details/75999 ...
最新文章
- MongoDB是什么以及它如何满足您的应用需求
- kernel笔记——中断
- c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...
- 配置 mybatis的 log4j.properties
- 高通被欧盟指控垄断 或将面临高达25亿美元罚款
- Laravel学习笔记之一
- Linux的shell编程
- Python中raise用法
- Cilium架构:提供并透明地保护应用程序工作负载之间的网络连接和负载平衡
- 郁闷的开始--8月21日
- jrebel离线激活_jrebel激活
- 作为一名黑客,通过技术手段发现女朋友出轨了...
- Excel ----- 身份证自动判断男女 公式
- 华北电力大学计算机学硕和专硕,华北电力大学非全日制研究生还分为学硕与专硕?...
- PAT——A1008Elevator(模拟)
- 第六次作业——潘芊睿
- 国内有名的文化与教育调查研究咨询公司
- Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
- VLOOKUP函数使用及注意事项
- 节能与环保杂志节能与环保杂志社节能与环保编辑部2023年第2期目录