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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于量化交易回测的金融股票案例基础知识[通俗易懂]

    基于量化交易回测的金融股票案例基础知识[通俗易懂]1量化交易定义量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选出能带来超额收益的多种“大概率”事件以制定策略。它极大的降低了市场波动给投资者情绪带来的影响,避免在市场极度狂热或者悲观的情况下做出非理性的投资决策。2量化交易分类趋势性交易:适合一些主观交易的高手,用技术性指标作为辅助工具在市场中如鱼得水的,但如果只用各种技术指标或指标组合作为核心算法…

    2022年5月8日
    54
  • 手机usb调试不弹出授权解决办法_adb远程调试怎么打开

    手机usb调试不弹出授权解决办法_adb远程调试怎么打开这里使用的Android源码是基于Android4.4的。如下图所示,修改persist.sys.usb.config=mtp,adb,修改ro.adb.secure=0。这里我修改的是device目录下对应厂家和产品的脚本,如果需要统一修改可以去build/core/main.mk中对应修改。…

    2022年9月4日
    4
  • StringUtils测试

    StringUtils测试来源:http://blog.sina.com.cn/s/blog_621b6f0e0100tqaj.htmlorg.springframework.util.StringUtils我们经常会对字符串进行操作,spring已经实现了常用的处理功能。我们可以使用org.springframework.util.StringUtils工具类帮我们处理字符串。工具类整理如下:

    2022年6月3日
    37
  • goland 2021.9 激活码【最新永久激活】

    (goland 2021.9 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月26日
    83
  • win10装kali linux双系统,win10安装kali组成双系统攻略「建议收藏」

    win10装kali linux双系统,win10安装kali组成双系统攻略「建议收藏」已在计算机上安装有win10系统,在这个基础上再安装kali组成双系统,所用的版本是KaliLinux2018.2,Linux内核为4.15版本。一、镜像下载根据需求下载自己需要的版本二、烧录这里推荐用win32diskimager,下载地址在这里,尝试了好几款烧录工具,这个是相对最稳定的。在win10中安装然后打开win32,如下图:第一步选中镜像位置。第二步选择要烧录的U盘的盘符,比如…

    2022年7月24日
    6
  • 安卓实现扫码登录_安卓登录界面

    安卓实现扫码登录_安卓登录界面首先不妨先看下Android:扫描二维码登陆原理:大概总结下这个过程就是:服务器生成全局唯一会话ID,并返回二维码、过期时间;用户扫描二维码,提交改会话ID,用户基本信息到服务器;PC端在过期时间内一直轮询,如果用户扫码,服务器记录状态,PC端跳转到已登录页面;那不妨按照这个思路来写一个简单的Demo。1.后台首先,我们需要搭建一个简易版的后台。在IDEA中创建SpringBoot项目,然后添加thymeleaf和session的依赖:<dependency> <

    2025年6月2日
    0

发表回复

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

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