C++解析XML文件
- TinyXML安装下载
- 解析XML文件
最近在使用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;