tinyxml2的使用说明

参考了这篇博客

tinyxml2安装

推荐使用vcpkg进行安装,关于vcpkg如何安装?
参考

https://docs.microsoft.com/zh-cn/cpp/build/install-vcpkg?view=msvc-160&tabs=macos#to-copy-and-set-up-vcpkg-on-windows

vcpkg如何使用?参考:

https://docs.microsoft.com/zh-cn/cpp/build/vcpkg-command-line-reference?view=msvc-160

tinyxml2库的基本说明

Element元素

每个元素都由两对尖括号围起来。格式如下

<元素名>这句话是当前元素的内容<\元素名>

整个xml文档一般都是元素套元素的结构,只有一个根元素,其他各元素都是根元素的子元素。

在tinyxml2中,XMLElement类的一个对象使用GetChildElement(param)方法获取指向子元素的指针。不传递参数时,默认返回第一个子元素的指针;传递一字符串指针时,返回第一个元素名与该字符串内容匹配的子元素的指针。

Attribute属性

在一对尖括号内部,分别是一个元素的名称(Name),属性(Attribute)和值(Value)。属性可以为空。示例如下

<元素名 属性1="属性1的值" 属性2="属性2的值" 属性3="属性3的值">

常用方法介绍

GetText()方法由XMLElement的对象调用,它获取的是当前元素内部除所有子元素之前的文本部分。例如下面的xml文档片段

<?xml version="1.0" encoding="UTF-8"?>
<root><TaskMsg>01015407<!-- 项目名称 --><ProjectName/><!-- 任务编号 --><TaskMsgID>1000000001</TaskMsgID><!-- 任务名称 --><TaskMsgName>任务名称</TaskMsgName><!-- 目标生产系统 --><TaskMsgTo>SG</TaskMsgTo><!--任务创建时间 --><TaskCreateTime>2020-09-06 11:52:21</TaskCreateTime>
2333</TaskMsg><Params><SubParam1>none</SubParam1><Params>
</root>

调用eleRoot->FirstChildElement("TaskMsg")->GetText()返回的字符串为“01015407”;

例程

写xml文件

// 创建xml文件
#include<tinyxml2.h>string filename="test.xml";int main()
{tinyxml2::XMLDocument docXml;// 添加声明tinyxml2::XMLDeclaration* declaration = docXml.NewDeclaration();docXml.InsertFirstChild(declaration);// 创建根节点tinyxml2::XMLElement* e_root = docXml.NewElement("AdjustmentOptions");docXml.InsertEndChild(e_root);// 给根节点添加新的子节点tinyxml2::XMLElement* e_AdjType = e_root->InsertNewChildElement("AdjustmentType");e_AdjType->SetText(adj_flag);tinyxml2::XMLElement* init_eo = e_root->InsertNewChildElement("InitialEOPFile");init_eo->SetText(eoname.c_str());tinyxml2::XMLElement* e_init_cam = e_root->InsertNewChildElement("InitialCameraFile");e_init_cam->SetText(cmrname.c_str());tinyxml2::XMLElement* e_max_iter = e_root->InsertNewChildElement("MaxIterNumber");e_max_iter->SetText(max_iter);tinyxml2::XMLElement* e_weightXYZ = e_root->InsertNewChildElement("WeightGPS");e_weightXYZ->SetText(weightXYZ);// 保存文件docXml.SaveFile(opt_file.c_str());return 0;
}

读xml文件

// 读取xml文件
#include<tinyxml2.h>string filename="test.xml";int main()
{tinyxml2::XMLDocument expXml;tinyxml2::XMLError err = expXml.LoadFile(filename.c_str());if (tinyxml2::XML_SUCCESS == err){tinyxml2::XMLElement* elmtRoot = expXml.RootElement();tinyxml2::XMLElement* ID1 = elmtRoot->FirstChildElement("TaskMsg");tinyxml2::XMLElement* ID2 = elmtRoot->FirstChildElement("InputParams");tinyxml2::XMLElement* ID3 = elmtRoot->FirstChildElement("OutParams");const tinyxml2::XMLElement* prjname =ID1->FirstChildElement("ProjectName")->NextSiblingElement(); //ID1->FirstAttribute();const char* pTName = prjname->GetText();const char* pTitle = prjname->Name();pTitle = prjname->Value();const tinyxml2::XMLAttribute* ID1_2 = ID2->FirstAttribute();std::cout << ID1_2->Name() << ":" << ID1_2->Value() << std::endl;const tinyxml2::XMLAttribute* ID1_2_1 = ID2->FirstAttribute()->Next();std::cout << ID1_2_1->Name() << ":" << ID1_2_1->Value() << std::endl;const tinyxml2::XMLAttribute* ID1_2_2 = ID2->FirstAttribute()->Next()->Next();std::cout << ID1_2_2->Name() << ":" << ID1_2_2->Value() << std::endl;const tinyxml2::XMLAttribute* ID1_3 = ID3->FirstAttribute();std::cout << ID1_3->Name() << ":" << ID1_3->Value() << std::endl;const tinyxml2::XMLAttribute* ID1_3_1 = ID3->FirstAttribute()->Next();std::cout << ID1_3_1->Name() << ":" << ID1_3_1->Value() << std::endl;const char* pContent1 = ID1->GetText();std::cout << "TaskMsg: " << pContent1 << std::endl;const char* pContent2 = ID2->GetText();std::cout << "InputParams: " << pContent2 << std::endl;const char* pContent3 = ID3->GetText();std::cout << "OutParams: " << pContent3 << std::endl;
}

tinyxml2的使用说明相关推荐

  1. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  2. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  3. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  4. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  5. [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml

    转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...

  6. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  7. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  8. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  9. 计算机网页基础课专业,关于《计算机应用基础》课程网页下的学习资源使用说明....

    关于<计算机应用基础>课程网页下的学习资源使用说明. 关于<计算机应用基础>课程网页下的学习资源使用说明 各位同学:大家好! 07春学期已接近一半的时间了,新生对课程还需要更多 ...

最新文章

  1. arm 饱和指令_ARM平台下NEON使用方法详解
  2. 好消息 | 顶级 AI 华人学者拟加入清华大学自动化系!
  3. ctfshow-WEB-web1签到题
  4. 狮子鱼独立版_轮转八方飞智八爪鱼2游戏手柄 | 大家测557
  5. SQL 数据库操作类
  6. 头文件不应该含有非inline函数或对象的定义
  7. android gdbserver
  8. STM32—驱动GY85-IMU模块
  9. 阿里云服务器如何隐藏真实ip
  10. excel工具栏隐藏了怎么办_Excel的可视化伴侣—水晶易表
  11. 【密码学】七、密钥管理
  12. 家用双千兆路由器推荐_千兆以上(专业级)无线路由器路由器哪款好
  13. 破防 | 姥姥摇着头说:“不记得你了”
  14. java基于ssm的论坛贴子网站ssm论坛项目发帖子网站论坛系统论坛源码
  15. 【国产之光】:龙芯1B(嵌入式方向)
  16. Exchange server 2010系列教程之九 配置exchange server 2010 OWA(3)
  17. 网上播放.flv格式的二种程序
  18. Graph Convolutional Neural Networks for Web-Scale Recommender Systems(用于Web级推荐系统的图形卷积神经网络)
  19. 常见的HTTP状态码及HTTP状态码大全
  20. 【fq_codel】fq_codel on Router

热门文章

  1. 会议是浪费工作时间的最佳去处
  2. 笔记本连上无线网但是无法上网络连接服务器,笔记本电脑连上无线网却不能上网怎么处理...
  3. 边缘融合 边缘计算_可怕的冲击力边缘
  4. python热力图颜色设置_【Python】绘制热力图seaborn.heatmap,cmap设置颜色的参数
  5. linux 安装jre和jdk,Ubuntu下安装JDK/JRE及问题的解决
  6. js的原型链简单理解
  7. 三年老Android经验面经,最全Android知识总结
  8. 什么是TypeReference?
  9. 微信小程序 获得用户输入内容
  10. vivo X20:内置独立DSP芯片 逆光拍照也清晰