• <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 閱讀(1205) 評論(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不拘小節, 但會給人誤導...  回復  更多評論
              

            亚洲精品乱码久久久久久不卡| 99久久国产精品免费一区二区| 久久只有这精品99| 久久国产三级无码一区二区| 久久久噜噜噜久久熟女AA片| 久久久精品国产免大香伊| 久久精品国产精品亜洲毛片| 国产精品美女久久久| 97久久超碰国产精品2021| 999久久久无码国产精品| 亚洲精品午夜国产VA久久成人| 久久精品无码一区二区WWW| 中文字幕人妻色偷偷久久| 一本色道久久88精品综合 | 高清免费久久午夜精品| 嫩草伊人久久精品少妇AV| 久久99热只有频精品8| 久久青草国产手机看片福利盒子| 久久99精品国产一区二区三区| 亚洲国产精品人久久| 久久久无码精品亚洲日韩软件| 久久婷婷五月综合色99啪ak| 久久午夜福利无码1000合集| 久久99久国产麻精品66| 99久久这里只有精品| 久久久免费观成人影院 | 国产精品亚洲美女久久久| 人妻精品久久无码区| 久久久久夜夜夜精品国产| 亚洲欧洲久久久精品| 久久99国产精品尤物| 久久久久99精品成人片| 无码精品久久久天天影视| 国产综合免费精品久久久| 亚洲精品无码专区久久同性男| 久久一日本道色综合久久| 激情久久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 狠狠色伊人久久精品综合网| 色欲久久久天天天综合网| 国产综合成人久久大片91|