TinyXml從記憶體中解析,並儲存到記憶體
阿新 • • 發佈:2019-01-03
網上介紹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!
寫的很簡單,不過希望對大家有用。