提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • XML文件理解
  • 常用的XML类方法使用
  • 总结

前言

TinyXML下载地址:https://sourceforge.net/projects/tinyxml/
官方文档:TinyXML

TinyXML是个解析库,它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。

XML文件理解

举一个官方文档《TinyXML Tutorial》中的例子

<?xml version="1.0" ?>
<MyApp>
<!-- Settings for MyApp -->
<Messages><Welcome>Welcome to MyApp</Welcome><Farewell>Thank you for using MyApp</Farewell>
</Messages>
<Windows>
<Window name="MainFrame" x="5" y="15" w="400" h="250" />
</Windows>
<Connection ip="192.168.0.1" timeout="123.456000" />
</MyApp>

XML是树形结构,有层数之分,其结点分为不同的类别,而TinyXML中针对不同类别定义了不同的类,下面简单介绍一下:(粗体是常用的)

  • <?xml version="1.0" ?>,TiXmlDeclaration,声明类
  • <MyApp>,TiXmlElement,元素类,该结点是根节点,后续的每个<></>都是一个结点
  • <!-- Settings for MyApp -->,TiXmlComment,注释类
  • Welcome to MyApp,TiXmlText,文本类,获取元素中的文本
  • TiXmlAttribute,属性类,name,x,y,w,h都是Window元素的属性

常用的XML类方法使用

接下来我们以一个目标检测的标签文件为例,来读取其中的boundingbox坐标信息。
XML文件:

<annotation><folder>JPEGImages</folder><filename>409.bmp</filename><path>E:\JPEGImages\409.bmp</path><source><database>Unknown</database></source><size><width>847</width><height>419</height><depth>3</depth></size><segmented>0</segmented><object><name>bad_part</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>512</xmin><ymin>153</ymin><xmax>693</xmax><ymax>325</ymax></bndbox></object><object><name>bad_part</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>251</xmin><ymin>251</ymin><xmax>321</xmax><ymax>313</ymax></bndbox></object>
</annotation>

文件中有两个boundingbox

获取bndbox元素下的最大最小坐标:

#include <iostream>
//打开xml文件需要加载的头文件
#include "tinystr.h"
#include "tinyxml.h"
#include <string>
#include<typeinfo>
using namespace std;int main()
{//创建xml文件对象,并读取xmlTiXmlDocument doc;doc.LoadFile("409.xml");//获取xml中根元素,并输出根节点的值,为<annotation>TiXmlElement *root = doc.FirstChildElement();cout << root->Value() << endl;//获取根节点孩子,输出节点值,输出节点的内容,Text是char*TiXmlElement *child = root->FirstChildElement();cout << child->Value() << endl;cout << child->GetText() << endl;cout << strlen(child->GetText())<< endl;//cout <<typeid(child->GetText()).name()<< endl;/*目标:找到xmin,xmax,ymin,ymax*/int xmin1,ymin1,xmax1,ymax1;//从根节点的第一个孩子节点开始遍历while(child!=NULL){if(child->ValueTStr() == "object"){TiXmlElement *box = child->FirstChildElement();while(box->ValueTStr()!="bndbox"){box = box->NextSiblingElement();}TiXmlElement *xmin = box->FirstChildElement();xmin1 = atoi(xmin->GetText());//NextSiblingElement()获得同一层下一个节点TiXmlElement *ymin = xmin->NextSiblingElement();ymin1 = atoi(ymin->GetText());TiXmlElement *xmax = ymin->NextSiblingElement();xmax1 = atoi(xmax->GetText());TiXmlElement *ymax = xmax->NextSiblingElement();ymax1 = atoi(ymax->GetText());cout<<xmin1<<endl;cout<<ymin1<<endl;cout<<xmax1<<endl;cout<<ymax1<<endl;}child = child->NextSiblingElement();}/*cout<<xmin1<<endl;cout<<ymin1<<endl;cout<<xmax1<<endl;cout<<ymax1<<endl;*//*一些其他方法的测试*//*//获取兄弟节点中的size节点TiXmlElement *brother = child->NextSiblingElement("size");cout << brother->Value() << endl;//cout << typeid(brother->GetText()).name()<< endl;//获取size节点下的属性值,<>中的属性,本例没有属性//cout <<brother->Attribute("width")<<endl;//找size下面节点widthTiXmlElement *brother_child = brother->FirstChildElement();cout << brother_child->Value() << endl;cout << brother_child->GetText() << endl;//读取到内容,并转为int型,因为项目需要int数据int width = atoi(brother_child->GetText());cout << width << endl;*/return 0;
}

总结

  1. 主要是链表相关知识。
  2. 常用的解析xml的方法。
  3. char*转int类型用atoi,转float用atof,typeid返回变量类型。

【C++】TinyXML读取xml文件用法详解相关推荐

  1. java读取本地文件_java 读取本地文件实例详解

    java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...

  2. java 读取本地文件_java 读取本地文件实例详解

    java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...

  3. python读yaml的库_Python读取YAML文件过程详解

    这篇文章主要介绍了Python读取YAML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python读取方法: import yaml ...

  4. Pom.xml文件教程详解

    原创整理不易,转载请注明出处:史上最全的maven pom.xml文件教程详解 代码下载地址:http://www.zuidaima.com/share/1781583829978112.htm   ...

  5. CSharp(C#)读取excel文件,详解

    CSharp(C#)读取excel文件,详解 一个电脑小白的自我成长之路(&_&). 1.先打开Excel表格,制作一个表.表名为information.如下图: 2.打开VS,创建C ...

  6. JAVA动态读取xml_Java动态生成和解析xml文件步骤详解

    packageday12;importjava.io.FileInputStream;importjava.util.ArrayList;importjava.util.List;importorg. ...

  7. php读取图片文件流,详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等)...

    详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 1.png (21.16 KB, 下载次数: ...

  8. (牛哇牛哇)读取OBJ文件及其详解

    原文链接:https://blog.csdn.net/zb1165048017/article/details/109103791 前言 最近处理一些网格渲染的时候,需要解析Obj文件,从Free3D ...

  9. python csv读取-Python读取csv文件(详解版,看了无师自通)

    前面程序展示的数据都是直接通过程序给出的,但实际应用可能需要展示不同来源(比如文件.网络).不同格式(比如 csv.JSON)的数据,这些数据可能有部分是损坏的,因此程序需要对这些数据进行处理. cs ...

最新文章

  1. [BZOJ] 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  2. Matplotlib的介绍及简单操作
  3. linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
  4. 祝贺!屠呦呦再获国际大奖!一文读懂:神药青蒿素那些我们不知道的事
  5. python栈是什么意思_Python数据结构——栈
  6. [转载]在VirtualBox中收缩虚拟磁盘映像文件
  7. 用户sa登陆失败 SQLServer 错误18456的解决方法
  8. Python列表的生成
  9. 一个python发包的脚本
  10. oracle存储过程隐式函数,Oracle存储过程,函数。
  11. xxd命令转换二进制十六进制文件
  12. 7月-伟大的事业,一般都是在下半年完成的
  13. Java教程01.Java简介与环境配置
  14. 19. Django进阶:分页
  15. LayaAir graphics 矢量绘图之 多边形、矩形
  16. 个人博客系统(附源码)
  17. 计算机怎么看c盘用户名,如何查看c盘的软件 如何查看电脑上安装在C盘的软件...
  18. 最优算法-LQR-离散时间有限边界
  19. LM4990音频功放芯片
  20. canvas 画空心圆 实心圆

热门文章

  1. jenkins实现多选框
  2. ITSS有效期多久?到期怎么办?
  3. 前端 DSL 实践指南(上)—— 内部 DSL
  4. 【FPGA】VGA的一些显示代码
  5. yum 完全卸载软件包
  6. 公务员备考(六) 行测 言语理解
  7. Matplotlib:设置栅格,
  8. unity WebGL nginx部署
  9. PTA-L1-070 吃火锅 (15 分
  10. IOS-datepick