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;