1. 程式人生 > >TinyXml從記憶體中解析,並儲存到記憶體

TinyXml從記憶體中解析,並儲存到記憶體

 網上介紹TinyXml的例子很多,所以不用再介紹了。最近也需要解析XML,從網上找了一下,發現TinyXml是最合適的。

TinyXml同時支援Windows和Linux平臺,而且它很小巧,功能也全面,包括對XML各種特性的操作。

不過美中不足,雖然網上的應用例項很多,但是大部分都是從檔案中解析和把資料儲存到檔案中的。而我需要的是解析記憶體中的資料,並且需要把資料儲存到記憶體中。

首先要提一下,TinyXml把Xml資料裡面的標籤、屬性、宣告、註釋、值等都看做是“節點”,體現在資料結構裡就是TiXmlNode。

因為條件限制,現在不能做測試用例,就把用法寫一下吧,希望對大家有幫助。

從記憶體中載入資料:

const char *cszXml = "<?xml version="1.0"?><BOOK><BOOKNAME>XML</BOOKNAME></BOOK>";

TiXmlDocument doc;
doc.Parse(cszXml);
if (true == doc.Error())
{
	cout << "Parse XML data error: " << doc.ErrorDesc() << endl;
	return;
}

將資料儲存到記憶體中:

TinyXml可以將資料儲存到檔案,也可以列印到螢幕上,當然,也可以直接儲存到記憶體中,其實也是應用的它的列印功能。

extern TiXmlDocument doc;		//! XML文件
extern char szXml[];			//! 存放結果字串

TiXmlPrinter printer;
printer.VisitEnter(doc);

// printer.SetIndent("");	//! 設定每行開頭的識別符號,預設是4個空格
// printer.SetLineBreak("");	//! 設定行分隔符,預設"\r\n"
// !上面兩行可以用這一行替代
printer.SetStreamPrinting();	//! 設定開頭的識別符號為"",行分隔符為""
sprintf(szXml, printer.CStr());	//! 將結果儲存到szXml中,C風格字串
//! int nSize = printer.Size();	//! 字串長度

順便捎帶一句:

判斷一個標籤是否有子標籤:

extern TiXmlElement xmlElem;
if (xmlElem.FistChildElement() )
{
     // TODO: 有子標籤
}
else
{
     // TODO: 沒有子標籤
}

GAME OVER!

寫的很簡單,不過希望對大家有用。