• <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>

            JUST DO IT

            我之所以在這里,只是因為我想要在這里

            TinyXML入門教程

            TinyXML入門教程 1
            什么是XML? 1
            文檔類 2
            創建文檔對象 3
            輸出文檔對象 3
            保存文檔對象 4
            返回第一個根元素 5
            聲明類 5
            注釋類 6
            元素類 6
            節點名 6
            父節點 6
            子節點 7
            編輯子節點 7
            同級節點 7
            遍歷元素 8
            元素屬性 8
            元素函數總結 9
            屬性類 10

             

            文章下載

            源代碼下載

            什么是XML?
            XML全稱EXtensible Markup Language,翻譯為可擴展標記語言,簡而言之就是你可以自定義數據的標識,以此來區分各種不同的數據,以便于進行數據交換,例如html就可以理解為一種簡單的xml語言。XML文件通常就是一個文本文件,可以使用任何編碼

             

             

            上圖就是我系統中一個xml文件的圖標,使用VC2005打開它,你可以看到如下內容:

             

            XML也是有這幾個對象組成了,一般來說我們經常使用的類如下:
            l TiXmlDocument:文檔類,它代表了整個xml文件。
            l TiXmlDeclaration:聲明類,它表示文件的聲明部分,如上圖所示。
            l TiXmlComment:注釋類,它表示文件的注釋部分,如上圖所示。
            l TiXmlElement:元素類,它是文件的主要部分,并且支持嵌套結構,一般使用這種結構來分類的存儲信息,它可以包含屬性類和文本類,如上圖所示。
            n TiXmlAttribute/TiXmlAttributeSet:元素屬性,它一般嵌套在元素中,用于記錄此元素的一些屬性,如上圖所示。
            n TiXmlText:文本對象,它嵌套在某個元素內部,如上圖所示。

            TinyXml使用文檔對象模型(DOM)來解析xml文件,這種模型的處理方式為在分析時,一次性的將整個XML文檔進行分析,并在內存中形成對應的樹結構,同時,向用戶提供一系列的接口來訪問和編輯該樹結構。這種方式占用內存大,但可以給用戶提供一個面向對象的訪問接口,對用戶更為友好,非常方便用戶使用。下面我們依次來介紹各個類的用法。

            文檔類
             

            文檔類代表一個XML文檔,通過它,你可以保存,載入和打印輸出文檔。你可以通過以下方式載入xml文檔到TiXmlDocument。

            創建文檔對象
            l 創建一個空的文檔對象,然后載入一個xml文檔
            使用到的函數原形如下:
            +TiXmlDocument();
            +bool LoadFile( const std::string& filename)
            在程序中你可以如下使用:

            //載入xml文檔
            TiXmlDocument doc();
            doc.LoadFile("tutorial.xml");

            l 2、在構造函數中傳入文檔的名稱,然后調用load函數完成解析載入
            使用到的函數原形如下:
            +TiXmlDocument( const std::string& documentName );
            +bool LoadFile();
            在程序中你可以如下使用:

            //載入xml文檔
            TiXmlDocument doc("tutorial.xml");
            doc.LoadFile();

            輸出文檔對象
            文檔類提供了Print()函數用于在控制臺輸出當前的文檔內容,這個函數的原形如下:
            +void Print() const
            在程序中你可以如下使用:

            //載入xml文檔
            TiXmlDocument doc("tutorial.xml");
            doc.LoadFile();
            doc.Print(); //輸出文檔
            tutorial.xml的內容如下:

            <?xml version="1.0" standalone="yes" encoding="utf-8"?>

            <!--comment 注釋-->

            <element attribute="this a attribute(這是一個屬性)" int= "1" float = "3.14">
            <subelement1>
               This a text(這是一個文本)
            </subelement1>
            <subelement2/>
            <subelement3/>
            <subelement4/>
            </element>
            在控制臺中你可以得到如下輸出:

            由于文件使用UTF-8編碼,而Windows下的控制臺默認使用gb2312編碼,因此會生成亂碼。

             

            保存文檔對象
            當然你也可以使用SaveFile()函數來進行另存為,這個函數的原形如下:
            bool SaveFile( const std::string& filename ) const
            在程序中你可以如下使用:

            //載入xml文檔
            TiXmlDocument doc("tutorial.xml");
            doc.LoadFile();
            doc.Print(); //輸出文檔
            cout<<endl;
            doc.SaveFile("tutorial.txt");
            使用記事本打開tutorial.txt,你可以看到如下內容。


            返回第一個根元素
            另外文檔對象還提供了一個實用的函數用于返回第一個根對象,它可以讓你方便的遍歷整個文檔結構,查找自己需要的數據。函數原形如下:
            +TiXmlElement* RootElement()
            我們在介紹元素類的時候再詳細介紹它的使用。

            聲明類
            在標準的XML文件中,聲明為文件的第一項,例如<?xml version="1.0" standalone="yes"?>,聲明對象具有三個屬性值,版本,編碼和獨立文件聲明
            一般來說文檔的第一行就是聲明對象,你可以把文檔對象的第一個子節點轉換為聲明對象。

            //使用TinyXml的聲明對象
            TiXmlDeclaration *decl;
            decl = doc.FirstChild()->ToDeclaration();
            然后就可以使用它的功能了,它可以讓你返回當前的版本,編碼等信息,函數原形如下:
            +const char *Version() const
            +const char *Encoding() const
            +const char *Standalone() const

            在程序中你可以如下使用:

            //使用TinyXml的聲明對象
            TiXmlDeclaration *decl;
            decl = doc.FirstChild()->ToDeclaration();
            cout<<"使用TinyXml的聲明對象(TiXmlDeclaration)"<<endl;
            //輸出聲明對象對應的xml內容
            decl->Print(0,4,&str);
            cout<<str<<endl;
            //分別輸出聲明對象的屬性
            cout<<"版本:"<<decl->Version()<<" 是否為對立文件:"<<decl->Standalone()<<" 編碼方式:"<<decl->Encoding()<<endl;
            cout<<endl; 


            注釋類
            這個類一般為xml數據提供解釋說明,在程序中一般不使用它,因此,這里就不介紹了。

            元素類
            元素為一個容器類,它具有元素名稱,并可以包含其它元素,文本,注釋和未知節點,這些對象統稱為元素的節點,即節點可以為元素、文本、注釋和未知節點類型。元素也可以包含任意個數的屬性。
            我們還是以如下的XML代碼來說明這個類的功能。

            <element attribute="this a attribute(這是一個屬性)" int= "1" float = "3.14">
            <subelement1>
               This a text(這是一個文本)
            </subelement1>
            <subelement2/>
            <subelement3/>
            <subelement4/>
            </element>

            節點名
            在上方元素的代碼中,element為根元素的名稱,你可以通過如下的函數來設置和返回它。
            +const std::string& ValueStr() const
            +void SetValue( const std::string& _value )

            父節點
            subelement1,subelement2,subelement3,subelement4都是element的子元素,如果當前元素對象的指針指向subelement1,subelement2,subelement3,subelement4,你可以通過Parent()函數來返回指向element對象的指針,Parent()函數的聲明如下:
            +TiXmlNode* Parent()

            子節點
            通過父節點的指針,你可以遍歷所有的子節點。
            +TiXmlNode* FirstChild()
            +TiXmlNode* FirstChild( const std::string& _value )
            上面兩個函數用于返回第一個子節點對象的指針,帶參數名的那個函數表示返回第一個名為_value的子節點。

            +TiXmlNode* LastChild()
            +TiXmlNode* LastChild( const std::string& _value )
            上面的兩個函數用于返回最后一個節點對象的指針,帶參數名的那個函數表示返回最后一個名為_value的子節點。

            你也可以使用IterateChildren()函數來依次遍歷所有的節點,它們的函數聲明如下:
            +TiXmlNode* IterateChildren( const TiXmlNode* previous )
            +TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous )
            帶參數名的那個函數表示只遍歷同名的節點。

            編輯子節點
            你可以插入、刪除替換所有的子節點。
            +TiXmlNode* InsertEndChild( const TiXmlNode& addThis );
            +TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
            +TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis );
            上面三個函數用于插入節點,InsertEndChild函數讓你把新節點插入到末尾,InsertBeforeChild和InsertAfterChild函數允許你在指定的節點位置前后插入節點。

            +TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
            ReplaceChild函數用于替換指定的節點。

            +bool RemoveChild( TiXmlNode* removeThis );
            RemoveChild函數讓你刪除指定的節點。
            void Clear();
            Clear函數會刪除本節點的所有子節點(包括子節點包含的從子節點),但不會修改本節點。

            同級節點

            <element attribute="this a attribute(這是一個屬性)" int= "1" float = "3.14">
            <subelement1>
               This a text(這是一個文本)
            </subelement1>
            <subelement2/>
            <subelement3/>
            <subelement4/>
            </element>
            在上面的xml代碼中,subelement1、subelement2、subelement3、subelement4都屬于同級節點,我們也提供了相關的函數用于在這些同級節點中遍歷。

            +TiXmlNode* PreviousSibling()
            +TiXmlNode* PreviousSibling( const std::string& _value )
            可以根據當前的節點,返回上一個節點的指針。帶參數名的那個函數表示返回上一個名為_value的節點。

            當然你也可以根據當前的節點,返回下一個節點的指針。帶參數名的那個函數表示返回下一個名為_value的節點。
            +TiXmlNode* NextSibling()
            +TiXmlNode* NextSibling( const std::string& _value)

            遍歷元素
            元素是一種特殊的節點,以’<’為開始字符,后接元素名稱。函數NextSiblingElement用于返回下一個同級元素,而忽略其它類型的節點。它們的函數聲明如下:
            +TiXmlElement* NextSiblingElement()
            +TiXmlElement* NextSiblingElement( const std::string& _value)
            帶參數名的那個函數表示返回下一個名為_value的同級元素。

            本類也提供了相關的函數,讓你返回第一個子元素。
            +TiXmlElement* FirstChildElement()
            +TiXmlElement* FirstChildElement( const std::string& _value )
            帶參數名的那個函數表示返回下一個名為_value的子元素。

            元素屬性
            屬性一般保存在元素中,它們為使用“=”號連接的兩個字符串,左邊的表示屬性名,等號右邊的表示屬性值,通常使用字符串、整數和浮點數等數據類型表示。例如,pi = 3.14。
            你可以通過如下的函數,返回屬性值。
            +const std::string* Attribute( const std::string& name ) const;
            +const std::string* Attribute( const std::string& name, int* i ) const;
            +const std::string* Attribute( const std::string& name, double* d ) const;
            在上面3個函數中,第一個函數使用字符串保存返回的屬性值,第二個函數把屬性值轉換為整數然后返回,第三個函數把屬性值轉換為浮點數然后返回。不過,第二、三個函數都會以字符串的形式記錄屬性值,并作為函數的返回值返回。
            另外,你也可以使用模板函數:
            +template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const
            來返回特點的屬性值,它會根據你傳入的參數,自動選擇合適數據類型。

            另外,本類也提供了如下三個函數讓你設置屬性,參數的類型和返回函數類似。
            +void SetAttribute( const std::string& name, const std::string& _value );
            +void SetAttribute( const std::string& name, int _value );
            +void SetDoubleAttribute( const char * name, double value );

            FirstAttribute和LastAttribute可以讓你返回第一個和最后一個屬性,它們的函數聲明如下:
            +TiXmlAttribute* FirstAttribute()
            +TiXmlAttribute* LastAttribute()
            RemoveAttribute函數可以讓你刪除指定名稱的屬性,它的函數聲明如下:
            +void RemoveAttribute( const std::string& name )

            元素函數總結
            ValueStr     //返回元素名稱
            SetValue     //設置元素名稱
            Parent     //返回父節點對象

            FirstChild    //返回第一個子節點
            LastChild     //返回最后一個子節點
            IterateChildren   //返回下一個子節點

            InsertEndChild   //在最后一個子節點后插入子節點
            InsertBeforeChild   //在指定的子節點前插入子節點
            InsertAfterChild   //在指定的子節點后插入子節點
            ReplaceChild    //替換指定的子節點
            RemoveChild    //刪除指定的子節點
            Clear     //刪除所有的子節點

            PreviousSibling   //返回同級中前一個節點
            NextSibling    //返回同級中后一個節點

            NextSiblingElement   //返回同級中后一個元素
            FirstChildElement   //返回第一個子元素節點
            Attribute     //返回元素中的屬性值
            QueryValueAttribute //返回元素中的屬性值
            SetAttribute    //設置元素中的屬性值
            FirstAttribute   //返回元素中第一個屬性對象
            LastAttribute    //返回元素中最后一個屬性對象
            RemoveAttribute   //刪除元素中指定的屬性對象

            屬性類
            屬性為名稱="值"對,元素可以具有屬性值,但名稱必須唯一。
            你可以通過
            +const std::string& NameTStr() const
            返回屬性名稱

            也可以通過下面三個函數返回屬性值:
            +const std::string& ValueStr() const
            +int     IntValue() const;
            +double    DoubleValue() const;

            當然你也可以設置屬性值,它們的函數聲明如下:
            +void SetName( const std::string& _name )
            +void SetIntValue( int _value );
            +void SetDoubleValue( double _value );
            +void SetValue( const std::string& _value )
            以上函數與元素類中的相關函數類似,這里不重復介紹了。

            在元素屬性中,通常具有許多屬性,你可以通過Next函數返回下一個屬性對象的指針,也可以通過Previous函數獲得上一個屬性對象的指針。它們的函數聲明如下:
            +TiXmlAttribute* Next()
            +TiXmlAttribute* Previous()


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/shangguanwaner/archive/2009/01/28/3853904.aspx

            posted on 2009-08-10 16:38 xmoss 閱讀(869) 評論(0)  編輯 收藏 引用 所屬分類: xml

            老色鬼久久亚洲AV综合| 中文字幕乱码人妻无码久久| 久久久久久国产精品无码下载| 亚洲国产精久久久久久久| 国内精品久久人妻互换| 中文字幕日本人妻久久久免费| 久久久久亚洲AV无码专区首JN | 2021精品国产综合久久| 99久久国产综合精品女同图片| 久久久无码精品亚洲日韩京东传媒 | 伊人色综合久久天天人守人婷| 久久精品一区二区影院| 欧美日韩中文字幕久久久不卡| 久久综合视频网站| 18禁黄久久久AAA片| 亚洲精品午夜国产VA久久成人| 狠狠综合久久AV一区二区三区| 久久久噜噜噜久久中文福利| 国产精品久久久久无码av| 国产精品99久久久久久www| 日韩电影久久久被窝网| 亚洲国产美女精品久久久久∴ | 精品久久久久久无码中文野结衣| 久久久人妻精品无码一区| 久久久久久精品免费看SSS| 东京热TOKYO综合久久精品| 国产精品激情综合久久| 丁香色欲久久久久久综合网| 久久久精品午夜免费不卡| 亚洲精品高清一二区久久| 国产精品久久久久影院色| 免费精品久久久久久中文字幕 | 亚洲国产精品无码久久九九| 精品久久久无码21p发布| 伊人热人久久中文字幕| 久久大香萑太香蕉av| 久久91精品国产91久久户| 国产欧美久久久精品影院| 91精品国产综合久久香蕉| 亚洲av成人无码久久精品| 久久精品女人天堂AV麻|