日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TinyXml高速入门(一)

發(fā)布時(shí)間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TinyXml高速入门(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:朱金燦
來源:http://blog.csdn.net/clever101


????? 對(duì)于xml文件,眼下我的工作僅僅是集中在配置文件和作為簡(jiǎn)單的信息文件來用,因此我不太喜歡使用msxml這樣的重量級(jí)的xml解析器,特別是使用msxml解析xml涉及到復(fù)雜的com類型轉(zhuǎn)換,更是令人感覺繁瑣。因此對(duì)于簡(jiǎn)單的xml文件的解析,我更愿意使用開源的TinyXml。


????? 首先介紹一下TinyXml吧。TinyXML是眼下很流行的一款基于DOM模型的XML解析器,簡(jiǎn)單易用且小巧玲瓏,很適合存儲(chǔ)簡(jiǎn)單數(shù)據(jù),配置文件,對(duì)象序列化等數(shù)據(jù)量不是很大的操作,其主頁是:http://www.grinninglizard.com/tinyxml/ ,眼下最新版本號(hào)是2.5.3 版本號(hào)。

TinyXml網(wǎng)上的教程非常多,可是我認(rèn)為寫得都不如何(感覺就是看完之后就沒學(xué)會(huì))。沒辦法,僅僅得自己整理一篇適合自己的,至于適不適合別人,就見仁見智了。我感覺xml文件本質(zhì)就是小型的數(shù)據(jù)庫,換個(gè)角度來說就是,你對(duì)數(shù)據(jù)庫有什么操作你對(duì)xml文件就應(yīng)能實(shí)現(xiàn)什么操作。一般而言,對(duì)數(shù)據(jù)庫的操作包含下面幾種:新建數(shù)據(jù)庫、查詢數(shù)據(jù)庫、改動(dòng)數(shù)據(jù)庫和刪除數(shù)據(jù)庫。那么相應(yīng)xml文件就是新建xml文件、查詢xml文件的指定節(jié)點(diǎn)的值,改動(dòng)xml文件里節(jié)點(diǎn)的值和刪除xml文件里節(jié)點(diǎn)的值。


?????? 首先我們認(rèn)識(shí)一下xml文件有哪幾種形式。以下我列出一些經(jīng)常使用的xml文件的形式:


example1.xml: <?xml version="1.0" ?> <Hello>World</Hello> example2.xml: <?xml version="1.0" ?> <poetry> <verse> Alas Great World Alas (again) </verse> </poetry> example3.xml: <?xml version="1.0" ?> <shapes> <circle name="int-based" x="20" y="30" r="50" /> <point name="float-based" x="3.5" y="52.1" /> </shapes> example4.xml: <?xml version="1.0" ?> <MyApp> <Messages> <Welcome>Welcome to MyApp</Welcome> <Farewell>Thank you for using MyApp</Farewell> </Messages> <Windows> <Window name="MainFrame" x="5" y="15" w="400" h="250" /> </Windows> <Connection ip="192.168.0.1" timeout="123.456000" /> </MyApp>


????? 上面的樣例摘自《TinyXML Tutorial 中文指南》。上面有四個(gè)樣例,你看到了xml文件的幾種表現(xiàn)形式?我看到了本質(zhì)來說只是是兩種表現(xiàn)形式:屬性值值在尖括號(hào)內(nèi),如<Window name="MainFrame" x="5" y="15" w="400" h="250" />和文本在尖括號(hào)外,如<Welcome>Welcome to MyApp</Welcome>,詳細(xì)例如以下圖:



???? 鑒于example4.xml比較復(fù)雜,以下我將以此為例介紹tinyxml的使用。


???? Tinyxml使用了兩種編譯選擇:使用標(biāo)準(zhǔn)C的char *類型或者使用STL中的std::string,當(dāng)中使用預(yù)處理器TIXML_USE_STL進(jìn)行控制,即加入�了TIXML_USE_STL為使用std::string的。鑒于STL的廣泛使用以及其強(qiáng)大功能,以下我以使用std::string的tinyxml說明。

首先使用VS 2005打開tinyxmlSTL.dsp的project文件,將其編譯成一個(gè)靜態(tài)庫,debug版本號(hào)為:tinyxmld_STL.lib,然后開始測(cè)試tinyxml庫。我的測(cè)試計(jì)劃是這種:首先使用tinyxml庫創(chuàng)建example4.xml,然后將其讀出來,然后查詢指定節(jié)點(diǎn)的屬性或文本,再改動(dòng)example4.xml(改動(dòng)當(dāng)中的一些節(jié)點(diǎn)值和刪除當(dāng)中一個(gè)節(jié)點(diǎn),添加�一個(gè)節(jié)點(diǎn)),然后再讀出來以推斷是否改動(dòng)成功。詳細(xì)是在VS 2005上新建一個(gè)控制臺(tái)project:Test,注意使用多字節(jié)字符集進(jìn)行編譯,同一時(shí)候加入�。首先是創(chuàng)建xml文件的代碼:


???? /*! * /brief 創(chuàng)建xml文件。 * * /param XmlFile xml文件全路徑。 * /return 是否成功。true為成功,false表示失敗。 */ bool CreateXml(std::string XmlFile) { // 定義一個(gè)TiXmlDocument類指針 TiXmlDocument *pDoc = new TiXmlDocument; if (NULL==pDoc) { return false; } TiXmlDeclaration *pDeclaration = new TiXmlDeclaration(_T("1.0"),_T(""),_T("")); if (NULL==pDeclaration) { return false; } pDoc->LinkEndChild(pDeclaration); // 生成一個(gè)根節(jié)點(diǎn):MyApp TiXmlElement *pRootEle = new TiXmlElement(_T("MyApp")); if (NULL==pRootEle) { return false; } pDoc->LinkEndChild(pRootEle); // 生成子節(jié)點(diǎn):Messages TiXmlElement *pMsg = new TiXmlElement(_T("Messages")); if (NULL==pMsg) { return false; } pRootEle->LinkEndChild(pMsg); // 生成子節(jié)點(diǎn):Welcome TiXmlElement *pWelcome = new TiXmlElement(_T("Welcome")); if (NULL==pWelcome) { return false; } pMsg->LinkEndChild(pWelcome); // 設(shè)置Welcome節(jié)點(diǎn)的值 std::string strValue = _T("Welcome to MyApp"); TiXmlText *pWelcomeValue = new TiXmlText(strValue); pWelcome->LinkEndChild(pWelcomeValue); // 生成子節(jié)點(diǎn):Farewell TiXmlElement *pFarewell = new TiXmlElement(_T("Farewell")); if (NULL==pFarewell) { return false; } pMsg->LinkEndChild(pFarewell); // 設(shè)置Farewell節(jié)點(diǎn)的值 strValue = _T("Thank you for using MyApp"); TiXmlText *pFarewellValue = new TiXmlText(strValue); pFarewell->LinkEndChild(pFarewellValue); // 生成子節(jié)點(diǎn):Windows TiXmlElement *pWindows = new TiXmlElement(_T("Windows")); if (NULL==pWindows) { return false; } pRootEle->LinkEndChild(pWindows); // 生成子節(jié)點(diǎn):Window TiXmlElement *pWindow = new TiXmlElement(_T("Window")); if (NULL==pWindow) { return false; } pWindows->LinkEndChild(pWindow); // 設(shè)置節(jié)點(diǎn)Window的值 pWindow->SetAttribute(_T("name"),_T("MainFrame")); pWindow->SetAttribute(_T("x"),_T("5")); pWindow->SetAttribute(_T("y"),_T("15")); pWindow->SetAttribute(_T("w"),_T("400")); pWindow->SetAttribute(_T("h"),_T("250")); // 生成子節(jié)點(diǎn):Window TiXmlElement *pConnection = new TiXmlElement(_T("Connection")); if (NULL==pConnection) { return false; } pRootEle->LinkEndChild(pConnection); // 設(shè)置節(jié)點(diǎn)Connection的值 pConnection->SetAttribute(_T("ip"),_T("192.168.0.1")); pConnection->SetAttribute(_T("timeout"),_T("123.456000")); pDoc->SaveFile(XmlFile); return true; }?



?????? 不知你注意到上面的規(guī)律沒有?首先父節(jié)點(diǎn)連接字節(jié)點(diǎn)使用函數(shù)LinkEndChild,用法是:pParentNode-> LinkEndChild(pChild);其次設(shè)置相似這樣的結(jié)構(gòu)<Window name="MainFrame" x="5" y="15" w="400" h="250" />採用SetAttribute函數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),前一個(gè)參數(shù)表示鍵,后一個(gè)參數(shù)表示鍵值,設(shè)置<Farewell>Thank you for using MyApp</Farewell>這樣的結(jié)構(gòu)採用TiXmlText類,使用LinkEndChild函數(shù)進(jìn)行連結(jié)。


????? 上面是創(chuàng)建xml文件的代碼,以下介紹讀取xml文件的代碼。打印整個(gè)xml文件的代碼非常easy,代碼例如以下:


/*! * /brief 打印xml文件。 * * /param XmlFile xml文件全路徑。 * /return 是否成功。true為成功,false表示失敗。 */ bool PaintXml(std::string XmlFile) { // 定義一個(gè)TiXmlDocument類指針 TiXmlDocument *pDoc = new TiXmlDocument(); if (NULL==pDoc) { return false; } pDoc->LoadFile(XmlFile); pDoc->Print(); return true; }



?? 下次介紹使用tinyxml庫對(duì)xml文件進(jìn)行查詢指定節(jié)點(diǎn)、刪除指定節(jié)點(diǎn)、改動(dòng)指定節(jié)點(diǎn)和添加�節(jié)點(diǎn)的使用方法。

參考文獻(xiàn):


1.《TinyXML新手教程 》


2. 《tinyxml 使用筆記與總結(jié) 》


3. 《TinyXML Tutorial 中文指南 》

















轉(zhuǎn)載于:https://www.cnblogs.com/yxwkf/p/4034888.html

總結(jié)

以上是生活随笔為你收集整理的TinyXml高速入门(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。