c++之TinyXml使用與應用,包含簡單的例子

使用方法:

使用c++寫代碼時,發現需要讀取一個比較複雜的xml文件,但是感覺Filestorage似乎處理不了,所以採用引入Xml解析庫的方式試圖解決。其中有很多種。覺得TinyXml比較簡單,方便使用(畢竟只是需要讀取一下簡單類型的xml文件)。於是在網上查了一下使用方法,真的很方便,只要將六個文件添加到工程中就可以了,分別是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。可以在網址中下載到點擊打開鏈接

使用VS進行編寫工程的時候,需要在六個文件中添加#include”stdafx.h“ 當使用TinyXml需要引入頭文件#include”tinyxml.h“。

使用舉例

使用在工程讀取的xml文件作爲例子吧;xml結構如下所示


解析的代碼如下所示:

ImgGraph GraphFusion::loadData(string path){
	ImgGraph graphs;
	TiXmlDocument doc;
	if (!doc.LoadFile(".\\graphs\\0hsv.xml")){
		cout << "Errors come with loading File";
	}
	TiXmlElement* root = doc.FirstChildElement(); 
	if (root == NULL){
		cout << "No root element" << endl;
	}
	TiXmlElement* graph = root->FirstChildElement();//屬性爲opencv_storage
	TiXmlElement* E_node = graph->FirstChildElement();//屬性爲graph
	while (E_node){
		string key_str = E_node->GetText();//得到index中的內容,不過是char*類型或者string類型
		//藉助stringstream 進行類型轉換
		stringstream ss;
		int key;
		ss <<key_str;
		ss >> key;
		E_node = E_node->NextSiblingElement();//下一個兄弟元素,屬性爲V_Node
		TiXmlElement* E_ImgNode = E_node->FirstChildElement();//得到子元素,ImgNode
		while (E_ImgNode){
			TiXmlElement* E_content = E_ImgNode->FirstChildElement();//得到子元素,Rindex
			stringstream ssnode;
			int index;
			float weight;
			string index_str = E_content->GetText();//得到Rindex中的內容
			//類型轉換
			ssnode << index_str;
			ssnode >> index;
			E_content = E_content->NextSiblingElement();//下一個兄弟節點,weight
			string weight_str =E_content->GetText();//得到weight中的內容
			//類型轉換
			stringstream ssWeight;
			ssWeight << weight_str;
			ssWeight >> weight;
			//插入到graphs中
			graphs.insertNode(key, ImgNode(index, weight));
			E_ImgNode = E_ImgNode->NextSiblingElement();//繼續ImgNode下一個兄弟節點
		}
		E_node = E_node->NextSiblingElement();//繼續V_Node 的下一個兄弟節點
	}
	
	return graphs;
}
          剛開始的時候沒有怎麼看TinyXml文檔,一通亂寫,後面看了文檔,纔沒有怎麼出錯。還是要養成看文檔的習慣,不然感覺都不會使現成的工具;

寫一下,萬一哪一天自己又用到了呢


發佈了44 篇原創文章 · 獲贊 127 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章