天天看點

C++解析XML檔案TinyXML安裝下載下傳解析XML檔案

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檔案

C++解析XML檔案TinyXML安裝下載下傳解析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;
           

繼續閱讀