#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创建、读取、修改文件通用操作相关推荐

  1. 使用tinyxml2.h读取xml文件并匹配文件中的值

    文章目录 前言 一.tinyxml2是什么? 二.使用步骤 1.xml文件 1.引入库 2.读入数据 附件 前言 `提示:使用tinyxml2.h读取xml文件并匹配文件中的值,需要导入#includ ...

  2. 使用vi/vim创建or修改文件的流程(最基本)

    一.vi.vim的三种工作模式及功能 命令模式:阅读.查找.复制粘贴 输入模式:录入文字 末行模式:保存.退出 二.工作模式之间的切换 i键:按i键可以从命令模式切换到输入模式 Esc键:按Esc键可 ...

  3. java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作

    import org.apache.commons.lang.StringUtils; import java.io.*; import java.util.HashMap; import java. ...

  4. Android心得4.1--文件的保存与读取及文件的操作模式详解.doc

    一.保存到手机内存 1.  很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: l     文件(采用IO数据流的方式) l     Sh ...

  5. OS模块--批量修改文件名字(一)创建和修改文件路径

    OS模块:在程序中,经常需要对大量文件和路径进行操作,比如:查询某一路径下同种类型文件,批量修改文件名字等.OS模块提供了非常丰富得方法用来处理文件和目录. 一.常用OS模块列表 二.OS模块创建文件 ...

  6. Linux中批量创建空白文件,在Linux中批量创建和修改文件或目录

    1. 用一条命令直接创建 [fred@Royalmile Auto_Ops]$ touch `seq 10` [fred@Royalmile Auto_Ops]$ ls 1  10  2  3  4  ...

  7. linux 快速建文件目录,在Linux中批量创建和修改文件或目录

    1. 用一条命令直接创建[fred@Royalmile Auto_Ops]$ touch `seq 10` [fred@Royalmile Auto_Ops]$ ls 1  10  2  3  4   ...

  8. python创建一个csv文件_python操作csv文件

    1 importcsv2 data =[3 #使用数字和字符串的数字都可以 4 ("ken","mafe",23),5 ("Tame",&q ...

  9. 关于MFC中读取EXCEL文件的操作

    转自:点击打开链接 .h文件的源码代码如下: 其中的头文件都是OLE的头文件.如何导出可以参考 http://blog.csdn.net/wyz365889/article/details/75999 ...

最新文章

  1. MongoDB是什么以及它如何满足您的应用需求
  2. kernel笔记——中断
  3. c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...
  4. 配置 mybatis的 log4j.properties
  5. 高通被欧盟指控垄断 或将面临高达25亿美元罚款
  6. Laravel学习笔记之一
  7. Linux的shell编程
  8. Python中raise用法
  9. Cilium架构:提供并透明地保护应用程序工作负载之间的网络连接和负载平衡
  10. 郁闷的开始--8月21日
  11. jrebel离线激活_jrebel激活
  12. 作为一名黑客,通过技术手段发现女朋友出轨了...
  13. Excel ----- 身份证自动判断男女 公式
  14. 华北电力大学计算机学硕和专硕,华北电力大学非全日制研究生还分为学硕与专硕?...
  15. PAT——A1008Elevator(模拟)
  16. 第六次作业——潘芊睿
  17. 国内有名的文化与教育调查研究咨询公司
  18. Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
  19. VLOOKUP函数使用及注意事项
  20. 节能与环保杂志节能与环保杂志社节能与环保编辑部2023年第2期目录

热门文章

  1. 【青年】第一篇博客文章
  2. Dicom 转 nii 格式
  3. JS年月日格式的时间比较大小
  4. 【8】SCI易中期刊推荐——图像处理领域(中科院4区)
  5. QtMqtt开发之部署到Qt安装目录
  6. Fortran 语言数组下标默认从1开始,C/C++/Java等其他语言默认从0开始
  7. oracle symonym_Oracle SYNONYM
  8. ubuntu配置minicom与dwn
  9. 元宵节又看到不好的东西了
  10. C语言之指针数组与数组指针详解