乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      TinyXML(解析XML,支持c++ )

       zhushasha520 2011-08-09
       

      TinyXML是一個(gè)開(kāi)源的解析XML的解析庫(kù),能夠用于C++,能夠在Windows或Linux中編譯。這個(gè)解析庫(kù)的模型通過(guò)解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹(shù)。

      DOM模型即文檔對(duì)象模型,是將整個(gè)文檔分成多個(gè)元素(如書(shū)、章、節(jié)、段等),并利用樹(shù)型結(jié)構(gòu)表示這些元素之間的順序關(guān)系以及嵌套包含關(guān)系。

      如下是一個(gè)XML片段:
         <Persons>
              <Person ID="1">
                  <name>周星星</name>
                  <age>20</age>
              </Person>
              <Person ID="2">
                  <name>白晶晶</name>
                  <age>18</age>
              </Person>
          </Persons>

       在TinyXML中,根據(jù)XML的各種元素來(lái)定義了一些類(lèi):

      TiXmlBase:整個(gè)TinyXML模型的基類(lèi)。

      TiXmlAttribute:對(duì)應(yīng)于XML中的元素的屬性。

      TiXmlNode:對(duì)應(yīng)于DOM結(jié)構(gòu)中的節(jié)點(diǎn)。

      TiXmlComment:對(duì)應(yīng)于XML中的注釋

      TiXmlDeclaration:對(duì)應(yīng)于XML中的申明部分,即<?versiong="1.0" ?>。

      TiXmlDocument:對(duì)應(yīng)于XML的整個(gè)文檔。

      TiXmlElement:對(duì)應(yīng)于XML的元素。

      TiXmlText:對(duì)應(yīng)于XML的文字部分

      TiXmlUnknown:對(duì)應(yīng)于XML的未知部分。 

      TiXmlHandler:定義了針對(duì)XML的一些操作。

      TinyXML是個(gè)解析庫(kù),主要由DOM模型類(lèi)(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作類(lèi)(TiXmlHandler)構(gòu)成。它由兩個(gè)頭文件(.h文件)和四個(gè)CPP文件(.cpp文件)構(gòu)成,用的時(shí)候,只要將(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)導(dǎo)入工程就可以用它的東西了。如果需要,可以將它做成自己的DLL來(lái)調(diào)用。舉個(gè)例子就可以說(shuō)明一切。。。

      對(duì)應(yīng)的XML文件:
      <Persons>
          <Person ID="1">
              <name>phinecos</name>
              <age>22</age>
          </Person>
      </Persons>

      讀寫(xiě)XML文件的程序代碼:

      #include <iostream>
      #include "tinyxml.h"
      #include "tinystr.h"
      #include <string>
      #include <windows.h>
      #include <atlstr.h>
      using namespace std;

      CString GetAppPath()
      {//獲取應(yīng)用程序根目錄
          TCHAR modulePath[MAX_PATH];
          GetModuleFileName(NULL, modulePath, MAX_PATH);
          CString strModulePath(modulePath);
          strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));
          return strModulePath;
      }

      bool CreateXmlFile(string& szFileName)
      {//創(chuàng)建xml文件,szFilePath為文件保存的路徑,若創(chuàng)建成功返回true,否則false
          try
          {
              //創(chuàng)建一個(gè)XML的文檔對(duì)象。
              TiXmlDocument *myDocument = new TiXmlDocument();
              //創(chuàng)建一個(gè)根元素并連接。
              TiXmlElement *RootElement = new TiXmlElement("Persons");
              myDocument->LinkEndChild(RootElement);
              //創(chuàng)建一個(gè)Person元素并連接。
              TiXmlElement *PersonElement = new TiXmlElement("Person");
              RootElement->LinkEndChild(PersonElement);
              //設(shè)置Person元素的屬性。
              PersonElement->SetAttribute("ID", "1");
              //創(chuàng)建name元素、age元素并連接。
              TiXmlElement *NameElement = new TiXmlElement("name");
              TiXmlElement *AgeElement = new TiXmlElement("age");
              PersonElement->LinkEndChild(NameElement);
              PersonElement->LinkEndChild(AgeElement);
              //設(shè)置name元素和age元素的內(nèi)容并連接。
              TiXmlText *NameContent = new TiXmlText("周星星");
              TiXmlText *AgeContent = new TiXmlText("22");
              NameElement->LinkEndChild(NameContent);
              AgeElement->LinkEndChild(AgeContent);
              CString appPath = GetAppPath();
              string seperator = "\\";
              string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
              myDocument->SaveFile(fullPath.c_str());//保存到文件
          }
          catch (string& e)
          {
              return false;
          }
          return true;
      }

      bool ReadXmlFile(string& szFileName)
      {//讀取Xml文件,并遍歷
          try
          {
              CString appPath = GetAppPath();
              string seperator = "\\";
              string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
              //創(chuàng)建一個(gè)XML的文檔對(duì)象。
              TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());
              myDocument->LoadFile();
              //獲得根元素,即Persons。
              TiXmlElement *RootElement = myDocument->RootElement();
              //輸出根元素名稱(chēng),即輸出Persons。
              cout << RootElement->Value() << endl;
              //獲得第一個(gè)Person節(jié)點(diǎn)。
              TiXmlElement *FirstPerson = RootElement->FirstChildElement();
              //獲得第一個(gè)Person的name節(jié)點(diǎn)和age節(jié)點(diǎn)和ID屬性。
              TiXmlElement *NameElement = FirstPerson->FirstChildElement();
              TiXmlElement *AgeElement = NameElement->NextSiblingElement();
              TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
              //輸出第一個(gè)Person的name內(nèi)容,即周星星;age內(nèi)容,即;ID屬性,即。
              cout << NameElement->FirstChild()->Value() << endl;
              cout << AgeElement->FirstChild()->Value() << endl;
              cout << IDAttribute->Value()<< endl;
          }
          catch (string& e)
          {
              return false;
          }
          return true;
      }
      int main()
      {
          string fileName = "info.xml";
          CreateXmlFile(fileName);
          ReadXmlFile(fileName);
      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多