• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            網絡服務器軟件開發/中間件開發,關注ACE/ICE/boost

            C++博客 首頁 新隨筆 聯系 聚合 管理
              152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks
            TinyXml是一個基于DOM模型的、非驗證的輕量級C++解釋器, 用來讀寫配置文件是最好的,可從http://www.grinninglizard.com/tinyxml/index.html這里下載。構建TinyXML 時可以選擇是否支持STL, 一般建議選擇支持STL。TinyXml的源碼包里提供了VC6的工程文件,直接用它就可以生成靜態庫。然后把tinyxml.h, tinystr.h和lib拷到你工程下, 就可以用了。要注意的是, 如果需要STL支持,在你的工程里要定義一個宏TIXML_USE_STL, 然后把下面代碼添加到你的代碼里, 這段是摘自TinyXML自帶的例子。
            #ifdef TIXML_USE_STL
            #include 
            <iostream>
            #include 
            <sstream>
            using namespace std;
            #else
            #include 
            <stdio.h>
            #endif

            #if defined( WIN32 ) && defined( TUNE )
            #include 
            <crtdbg.h>
            _CrtMemState startMemState;
            _CrtMemState endMemState;
            #endif

                 我參考了網上的有關TinyXML的文章, 寫了一個讀寫XML的例子,代碼如下:

            #include "tinyxml.h"

            #ifdef TIXML_USE_STL
            #include 
            <iostream>
            #include 
            <sstream>
            using namespace std;
            #else
            #include 
            <stdio.h>
            #endif

            #if defined( WIN32 ) && defined( TUNE )
            #include 
            <crtdbg.h>
            _CrtMemState startMemState;
            _CrtMemState endMemState;
            #endif

            #pragma comment(lib, "tinyxmld_STL.lib")


            int WriteXML() ;
            int ReadXML() ;
            //讀取內存里的一段XML
            int ReadXML2() ;

            int main(int argc, char *argv[])
            {
                cout 
            << "開始測試!" <<endl;
                
                WriteXML() ;
                ReadXML() ;
                ReadXML2() ;
                cout 
            << "結束測試!" << endl ;
                
                
            return 0;
            }


            int WriteXML()
            {
                TiXmlDocument xmlDoc( 
            "test.xml" ); // 建立一個XML文件
                
                TiXmlDeclaration Declaration( 
            "1.0","gb2312""yes" ); // 聲明XML的屬性
                
                xmlDoc.InsertEndChild( Declaration ); 
            // 寫入基本的XML頭結構    
                
                TiXmlNode 
            * pNode = NULL; 
                TiXmlElement
            * pRootElm = NULL; 
                TiXmlElement
            * pChildeElm = NULL; 
                TiXmlElement
            * pItemElm = NULL; 
                TiXmlText
            * pText = NULL; // 一個指向Text的指針
                pText = new TiXmlText("good") ;
                
                pRootElm 
            = new TiXmlElement( "todo" ); 
                
                pNode 
            = xmlDoc.InsertEndChild(*pRootElm) ;
                pRootElm 
            = pNode->ToElement() ;
                
                pChildeElm 
            = new TiXmlElement("child1") ;
                pChildeElm
            ->SetAttribute("num"9) ;
                
                pNode 
            = pRootElm->InsertEndChild(*pChildeElm) ;
                TiXmlElement
            * pChildeElm1 = NULL; 
                pChildeElm1 
            = pNode->ToElement() ;
                pChildeElm1
            ->InsertEndChild(*pText) ;
                
                delete pChildeElm ;
                pChildeElm 
            = NULL ;
                pChildeElm 
            = new TiXmlElement("child2") ;
                pChildeElm
            ->SetAttribute("num"10) ;
                
                pNode 
            = pRootElm->InsertBeforeChild (pChildeElm1, *pChildeElm) ;
                TiXmlElement
            * pChildeElm2 = NULL; 
                pChildeElm2 
            = pNode->ToElement() ;
                pChildeElm2
            ->InsertEndChild(*pText) ;
                
                
                xmlDoc.Print() ;
                
                xmlDoc.SaveFile(); 
            // 把XML文件寫入硬盤
                
                
            return 0 ;
            }



            int ReadXML()
            {
                cout
            <<endl ;
                cout
            <<"開始read XML"<<endl ;
                TiXmlDocument xmlDoc( 
            "test.xml" );
                xmlDoc.LoadFile() ;
                
                TiXmlElement
            * xmlRootElement = 0 ;
                TiXmlElement
            * xmlSubElement = 0 ;
                TiXmlNode 
            * pNode = NULL; 
                
                pNode 
            = xmlDoc.FirstChild("todo") ;
                xmlRootElement 
            = pNode->ToElement() ;
                
                
            if(xmlRootElement)
                
            {
                    pNode 
            = xmlRootElement->FirstChild("child1") ;
                    xmlSubElement 
            = pNode->ToElement() ;
                    cout
            <<xmlSubElement->Value()<<endl ;
                    cout
            <<xmlSubElement->Attribute("num")<<endl ;
                    cout
            <<xmlSubElement->GetText()<<endl ;
                }

                
            else
                
            {
                    cout
            <<"找不到根元素"<<endl ;
                }

                
                cout
            <<"結束read XML"<<endl ;
                
            return 0 ;
            }


            int ReadXML2()
            {
                cout
            <<endl ;
                cout
            <<"開始read XML"<<endl ;

                
            const char* demoEnd ="<?xml version="1.0" encoding="gb2312" standalone="yes" ?>"
                                     
            "<todo>"
                                     
            "<child2 num="10">good</child2>"
                                     
            "<child1 num="9">good</child1>"
                                     
            "</todo>" ;
                TiXmlDocument xmlDoc;

                xmlDoc.Parse( demoEnd ) ;
                
                TiXmlElement
            * xmlRootElement = 0 ;
                TiXmlElement
            * xmlSubElement = 0 ;
                TiXmlNode 
            * pNode = NULL; 
                
                pNode 
            = xmlDoc.FirstChild("todo") ;
                xmlRootElement 
            = pNode->ToElement() ;
                
                
            if(xmlRootElement)
                
            {
                    pNode 
            = xmlRootElement->FirstChild("child1") ;
                    xmlSubElement 
            = pNode->ToElement() ;
                    cout
            <<xmlSubElement->Value()<<endl ;
                    cout
            <<xmlSubElement->Attribute("num")<<endl ;
                    cout
            <<xmlSubElement->GetText()<<endl ;
                }

                
            else
                
            {
                    cout
            <<"找不到根元素"<<endl ;
                }

                
                cout
            <<"結束read XML"<<endl ;
                
            return 0 ;
            posted on 2007-04-04 17:14 true 閱讀(1210) 評論(2)  編輯 收藏 引用 所屬分類: 其它開源庫

            Feedback

            # re: tinyxml 的使用,轉 2007-05-14 08:03 zhangyingshi
            突然問您個問題問題有些唐突,敬請您解答
            關于tinyxml
            在VC6.0中使用,源程序使用的是多線程release編譯所以我把tinyxml下載文件夾里的tinyxml_lib.dsp也用多線程release編譯生成了tinyxmld.lib,同兩個頭文件加入到程序中加入到程序中,函數調用都正常.但每次loadfile時候都失敗,跟蹤調試發現每次loadfile都探出一個對話框讓我指定vc60.pdb的位置,制定了幾次都不對
            想問問您多線程編譯是不是這樣就可以?還是我使用tinyxml方法有問題
            那個對話框是怎么回事。
            該指定那個?
            等待著您的回答。謝謝  回復  更多評論
              

            # re: tinyxml 的使用,轉 2007-05-14 11:55 eXile
            作為一個測試程序, WriteXML 中對象的管理很混亂, 也許是lz不拘小節, 但會給人誤導...  回復  更多評論
              

            久久亚洲国产中v天仙www | 中文字幕久久久久人妻| 一本大道久久香蕉成人网 | 国产精品伊人久久伊人电影| 久久精品人人做人人爽电影蜜月 | 91精品国产91久久| 久久国产AVJUST麻豆| 久久w5ww成w人免费| 久久精品国产亚洲av瑜伽| 影音先锋女人AV鲁色资源网久久| 9久久9久久精品| 中文精品99久久国产| 精品国产一区二区三区久久| 久久综合色区| 91精品国产高清久久久久久91| 无码国内精品久久综合88| 一本色道久久88加勒比—综合| 亚洲va国产va天堂va久久| 蜜桃麻豆WWW久久囤产精品| 精品久久香蕉国产线看观看亚洲 | 亚洲国产精品综合久久网络| 久久伊人精品青青草原高清| 人妻精品久久无码专区精东影业| 久久久久九九精品影院| 国产精品一久久香蕉产线看| 亚洲国产欧洲综合997久久| 亚洲精品97久久中文字幕无码| 国内精品伊人久久久久网站| 99精品久久久久久久婷婷| 国产精品一区二区久久精品| 91久久婷婷国产综合精品青草| 亚洲色婷婷综合久久| 天天躁日日躁狠狠久久 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久久精品久久久久久 | www.久久热.com| 久久免费线看线看| 国产精品99久久久久久董美香| 91久久国产视频| 久久久久国产| 手机看片久久高清国产日韩|