C++解析XML文件[通俗易懂]

C++解析XML文件[通俗易懂]C++解析XML文件TinyXML安装下载解析XML文件最近在使用C++处理GF-3和RADARSAT-2雷达影像,需要通过解析XML文件获取影像时间,我选用了TinyXML库来解析。参考了网上的一些教程,这个文档个人觉得是解释的很清晰的。(https://www.cnblogs.com/hgwang/p/5833638.html),第一次使用记录一下学习过程,供以后参考。TinyXML安装下…

大家好,又见面了,我是你们的朋友全栈君。

最近在使用C++处理GF-3和RADARSAT-2雷达影像,需要通过解析XML文件获取影像时间,我选用了
TinyXML库来解析。参考了网上的一些教程,这个文档个人觉得是解释的很清晰的。(https://www.cnblogs.com/hgwang/p/5833638.html),第一次使用记录一下学习过程,供以后参考。

TinyXML安装下载

进入官网下载,解压缩,将其中的tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp 6个文件放在你的项目目录下,就是你自己写的.h和.cpp文件所在的目录。

解析XML文件

先看一下XML文件内容。下面这个是RADARSAT-2影像的product.xml文件
在这里插入图片描述
在XML文档中,每个<></>标签都是一个节点或元素。解析时需要逐层搜索(好像是不能全文检索),直到找到我们要的那个标签。同一层中,可以根据元素名使用IterateChildren方法来查找匹配的节点。

我的需求是获取rawDataStartTime节点中的时间。直接上代码。

#include"tinyxml.h"
#include"tinystr.h"

	TiXmlDocument doc;
	//加载文档
	if (!doc.LoadFile(xml_file))
	{ 
   
		std::cerr << doc.ErrorDesc() << std::endl;
		exit(1);
	}
	//获取根节点,也是xml文档的声明部分
	TiXmlElement* root = doc.FirstChildElement();
	if (root == NULL)
	{ 
   
		std::cerr << "Failed to load file: No root element." << std::endl;
		doc.Clear();
		exit(1);
	}
	std::string xml_time;
	TiXmlNode *source_node = NULL;
	//查找sourceAttributes节点
	source_node = root->IterateChildren("sourceAttributes", source_node);

	TiXmlElement *source_elem = NULL;
	source_elem = source_node->ToElement();

	TiXmlNode *rawdata_node = NULL;
	//查找rawDataStarTime节点
	rawdata_node = source_elem->IterateChildren("rawDataStartTime", rawdata_node);
	//获取该节点的文本信息。
	xml_time = rawdata_node->ToElement()->GetText();
	return xml_time;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159155.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月14日 上午10:16
下一篇 2022年7月14日 上午10:36


相关推荐

  • rgbd slam v2_rgb数据格式

    rgbd slam v2_rgb数据格式系统版本:Ubuntu16.04+ROS-Kinect1、安装运行首先rgbdslamv2是2014年开源出来的一个机遇RGBD相机构建点云地图的框架【1】,作者已经在github上开源出了代码【2】,并且给出了一个一键安装的脚本(install.sh)。但是我们会发现,我们直接运行这个install脚本会在~/Code目录下创建一个rgbdslam_catkin_ws工作空间,…

    2025年11月22日
    4
  • 写辅助脚本违法吗_网络游戏里的成功几率

    写辅助脚本违法吗_网络游戏里的成功几率转至http://www.cppblog.com/elva/archive/2008/02/19/42924.html一、前言  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间…

    2022年10月8日
    4
  • 机器学习导论(张志华):多项式分布

    机器学习导论(张志华):多项式分布前言这个笔记是北大那位老师课程的学习笔记,讲的概念浅显易懂,非常有利于我们掌握基本的概念,从而掌握相关的技术。基本概念两个矩阵相似:两个矩阵特征值一样。两个矩阵合同:矩一样,就是个数一样。#高斯分布的特性知道μ和σ\mu和\sigmaμ和σ就可以确定这个分布,是它的信息量。流形学习(manifoldlearning)学习的是空间局部点之间的关系。多项式分布Themult…

    2022年10月10日
    4
  • java date 毫秒_如何在几个数字上加上同一个单位

    java date 毫秒_如何在几个数字上加上同一个单位//时间加上秒后的时间日期publicstaticDatetimePastTenSecond(Integersecond,Stringotime){try{SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);Datedt=sdf.parse(otime);CalendarnewTime=Calenda.

    2025年9月19日
    6
  • 透彻理解多元正态分布

    透彻理解多元正态分布本篇内容主要是对于基本书籍教材多元正态分布相关章节所写的学习笔记 结合自己的理解尽可能表述得通俗易懂 主要思路内容取自 程序员的数学之概率统计 前言多元正态分布就是含有多个变量的正态分布 为什么关于多元正态分布要专门写一篇学习笔记 因为其具有重要意义 在理论研究或者实际应用中 我们常会首先考虑多元正态分布是否适用 如果不符 再考虑其他类型的分布 基于下面两个特征 多元正态分布应用十分广泛

    2026年3月19日
    2
  • QString与char *的相互转换

    QString与char *的相互转换在进行编程时,我们经常需要用到字符串这种类型,毫无疑问,Qt库中也对字符串类型进行了封装,QString类提供了你能想到的所有字符串操作方法,给开发者带来了极大方便。  但是我们在编写程序时,不可避免地会在Qt框架上使用第三方的开源库,由于库的类型基本上都是标准的类型,即使用char*来表示字符串类型。那么问题来了,QString和char*之间如何进行转换呢?  下面分两

    2022年5月12日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号