iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中TinyXML读取xml文件用法详解
  • 772
分享到

C++中TinyXML读取xml文件用法详解

2024-04-02 19:04:59 772人浏览 安东尼
摘要

目录前言XML文件理解常用的XML类方法使用总结前言 TinyXML下载地址:https://sourceforge.net/projects/tinyxml/ 官方文档:TinyX

前言

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文件对象,并读取xml
    TiXmlDocument 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;

    
    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();
    }

    
    
    
    

    return 0;
}

总结

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

 到此这篇关于c++中TinyXML读取xml文件用法详解的文章就介绍到这了,更多相关C++ TinyXML读取xml内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中TinyXML读取xml文件用法详解

本文链接: https://www.lsjlt.com/news/151084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中TinyXML读取xml文件用法详解
    目录前言XML文件理解常用的XML类方法使用总结前言 TinyXML下载地址:https://sourceforge.net/projects/tinyxml/ 官方文档:TinyX...
    99+
    2024-04-02
  • C++中怎么使用TinyXML读取xml文件
    这篇文章主要介绍了C++中怎么使用TinyXML读取xml文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中怎么使用TinyXML读取xml文件文章都会有所收获,下面我们一起来看看吧。前言TinyXML...
    99+
    2023-07-02
  • C#怎么读取XML文件
    这篇文章主要讲解了“C#怎么读取XML文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么读取XML文件”吧!用C#读取XML文件源程序代码,具体如下:using Syste...
    99+
    2023-06-17
  • C++提取文件名与提取XML文件的方法详解
    目录1、提取文件名2、提取XML文件总结1、提取文件名 查找容器内子序列的最后一次出现的位置 std::find_end(str.begin(), str.end(), patter...
    99+
    2024-04-02
  • C++OpenCV读写XML或YAML文件的方法详解
    目录前言1.如何使用1.1第一步:XML、YAML文件的打开1.2 第二步:进行文件读写操作1.3 第三步:vector(array)和map的输入和输出1.4 第四步:文件关闭2....
    99+
    2024-04-02
  • C#读取XML文件的简单介绍
    这篇文章主要讲解了“C#读取XML文件的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#读取XML文件的简单介绍”吧!C#读取XML文件:编译NO2.cs后,执行将产生"...
    99+
    2023-06-17
  • c#读取文件详谈
    c#里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,那么你真的会用它读取文件中的数据了么?真的能读完全么? 通常我们读取一个文件使用如下的步骤: 1、声明...
    99+
    2022-11-15
    c# 读取文件
  • C#读写xml文件方法总结(超详细!)
    目录C#写入xml文件1、XmlDocument2、DataSet对象里的值来生成XML文件3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。示例:写入xml...
    99+
    2023-02-21
    c#读写xml文件 c# 读xml c#读取xml文件教程
  • Mybatis sql与xml文件读取方法详细分析
    在执行一个自定义sql语句时,dao对应的代理对象时如何找到sql,也就是dao的代理对象和sql之间的关联关系是如何建立的。        ...
    99+
    2023-01-28
    Mybatis sql文件读取 Mybatis xml文件读取
  • 如何用Ajax读取xml文件
    本篇内容介绍了“如何用Ajax读取xml文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 一文详解Spring是怎么读取配置Xml文件的
    目录Spring读取配置文件DocumentElementDocumentDefaultsDefinitionSpring读取配置文件Document 在XmlBeanDefinit...
    99+
    2024-04-02
  • C/C++实现segy文件的读取详解
    目录1头文件ReadSeismic.h的编写及其规范1.1程序描述、调用、声明、定义1.2声明函数1.3完整代码2C++文件ReadSeismic.cpp的编写及其规范2.1必要的说...
    99+
    2024-04-02
  • 如何使用Python读取xml文件
    目录 什么是xml?获得标签属性获得子标签获得标签属性值获得标签对之间的数据方法一方法二 什么是xml? xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自...
    99+
    2023-05-15
    Python读取 Python读取xml Python读取文件
  • C#中怎么利用XMLTextReader类读取XML文档
    今天就跟大家聊聊有关C#中怎么利用XMLTextReader类读取XML文档,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#读取XML文档之在.NET框架的System.XML名称...
    99+
    2023-06-18
  • 怎么使用Python读取xml文件
    本篇内容介绍了“怎么使用Python读取xml文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 什么是xml?xml即可扩展标记语言,它可...
    99+
    2023-07-06
  • java读取xml文件的方法有哪些
    Java读取XML文件的方法有以下几种:1. 使用DOM解析器:DOM解析器将整个XML文档加载到内存中,形成一个树形的DOM对象,...
    99+
    2023-09-27
    java
  • C语言实现读取CSV文件的方法详解
    1、每一次只能读取同一种数据类型,不能读取字符串。 2、第次读取会返回一个 CSV数据结构,有源数据和二维数组,行列数信息 3、可以转换二维数组,但总大小不能变 123.csv M...
    99+
    2022-12-21
    C语言读取CSV文件 C语言读取CSV C语言 CSV
  • C#读取文件的方法
    本篇内容介绍了“C#读取文件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#读取文件高效方法问题的提出:你平时是怎么读取文件的?使用...
    99+
    2023-06-18
  • 怎么用dom4j读取xml配置文件
    本篇内容主要讲解“怎么用dom4j读取xml配置文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用dom4j读取xml配置文件”吧!实现步骤以及源码:1、写xml文件读取类读取xml文档内...
    99+
    2023-06-03
  • python读写xml文件实例详解嘛
    目录xml文件:country.xmlxml文件解读读取文件:增加新节点及修改属性值和文本总结xml文件:country.xml <data> <country ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作