程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ TinyXml操作C++ TinyXml操作

C++ TinyXml操作C++ TinyXml操作

編輯:C++入門知識

C++ TinyXml操作 前言 TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯,使用TinyXML進行C++ XML解析,使用簡單,容易上手。 這個解析庫的模型通過解析XML文件,然後在內存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。  DOM模型即文檔對象模型,是將整個文檔分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的順序關系以及嵌套包含關系。   TinyXML介紹 在TinyXML中,根據XML的各種元素來定義了一些類: TiXmlBase:整個TinyXML模型的基類。 TiXmlAttribute:對應於XML中的元素的屬性。 TiXmlNode:對應於DOM結構中的節點。 TiXmlComment:對應於XML中的注釋。 TiXmlDeclaration:對應於XML中的申明部分,即<?versiong="1.0" ?>。 TiXmlDocument:對應於XML的整個文檔。 TiXmlElement:對應於XML的元素。 TiXmlText:對應於XML的文字部分。 TiXmlUnknown:對應於XML的未知部分。  TiXmlHandler:定義了針對XML的一些操作。     本文運行環境是: Redhat 5.5 + g++version 4.6.1 +  GNU Make 3.81 + tinyxml_2_6_2   下載地址是:http://sourceforge.net/projects/tinyxml/   解壓之後得到文件夾tinyxml,tinyxml的頭文件和cpp文件,都在這個文件夾,為了我們的管理我們的項目工程,我們還是把tinyxml做一個整理。   由於tinyxml不僅支持Linux編譯,同時也支持windows下編譯,所以解壓之後不僅有h文件,cpp文件,還有vc工程的一些工程文件,這裡我們只在Linux上使用,所以只留下h文件和cpp文件,其他文件一概刪除   這裡我列出整理後的工作目錄:     tinyxml/           //工作目錄 |-- include        //頭文件根目錄 |  |-- tinyxml    //tinyxml頭文件,包括tinystr.h tinyxml.h |-- src            //cpp源碼文件根目錄   |-- tinyxml       //tinyxml源碼文件夾,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp   |-- main.cpp   //我們的主函數,調用tinyxml的示例代碼   |-- conf            //我們示例中用的xml文件所在的文件夾 |-- makefile       //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐       最簡單的例子 我們在conf目錄下建立student.xml,xml代碼如下:     <School name="軟件學院">       <Class name = "C++">           <Student name="tinyxml" number="123">               <email>[email protected]</email>               <address>中國</address>                    </Student>           <Student name="jsoncpp" number="456">               <email>[email protected]</email>               <address>美國</address>                    </Student>       </Class>   </School>     使用tinyxml,我們只需要在頭文件中包含 <tinyxml.h>就行了。   打印整個XML代碼如下:     void printSchoolXml() {     using namespace std;     TiXmlDocument doc;       const char * xmlFile = "conf/school.xml";        if (doc.LoadFile(xmlFile)) {             doc.Print();       } else {         cout << "can not parse xml conf/school.xml" << endl;     }    }       讀取XML 代碼如下:     void readSchoolXml() {     using namespace std;     const char * xmlFile = "conf/school.xml";     TiXmlDocument doc;                                   if (doc.LoadFile(xmlFile)) {         doc.Print();     } else {         cout << "can not parse xml conf/school.xml" << endl;         return;     }     TiXmlElement* rootElement = doc.RootElement();  //School元素       TiXmlElement* classElement = rootElement->FirstChildElement();  // Class元素     TiXmlElement* studentElement = classElement->FirstChildElement();  //Students       for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {         TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //獲得student的name屬性           for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {             cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;                }                                            TiXmlElement* studentContactElement = studentElement->FirstChildElement();//獲得student的第一個聯系方式          for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {             string contactType = studentContactElement->Value();             string contactValue = studentContactElement->GetText();             cout << contactType  << " : " << contactValue << std::endl;                    }              }  }   寫入xml 這裡我們將通過xml寫入代碼操作,寫入幾乎和conf/school.xml同樣內容到conf/school-write.xml,代碼如下:     void writeSchoolXml() {     using namespace std;     const char * xmlFile = "conf/school-write.xml";      TiXmlDocument doc;       TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");       TiXmlElement * schoolElement = new TiXmlElement( "School" );       TiXmlElement * classElement = new TiXmlElement( "Class" );       classElement->SetAttribute("name", "C++");       TiXmlElement * stu1Element = new TiXmlElement("Student");     stu1Element->SetAttribute("name", "tinyxml");     stu1Element->SetAttribute("number", "123");     TiXmlElement * stu1EmailElement = new TiXmlElement("email");     stu1EmailElement->LinkEndChild(new TiXmlText("[email protected]") );     TiXmlElement * stu1AddressElement = new TiXmlElement("address");     stu1AddressElement->LinkEndChild(new TiXmlText("中國"));     stu1Element->LinkEndChild(stu1EmailElement);     stu1Element->LinkEndChild(stu1AddressElement);       TiXmlElement * stu2Element = new TiXmlElement("Student");     stu2Element->SetAttribute("name", "jsoncpp");     stu2Element->SetAttribute("number", "456");     TiXmlElement * stu2EmailElement = new TiXmlElement("email");     stu2EmailElement->LinkEndChild(new TiXmlText("[email protected]"));     TiXmlElement * stu2AddressElement = new TiXmlElement("address");     stu2AddressElement->LinkEndChild(new TiXmlText("美國"));     stu2Element->LinkEndChild(stu2EmailElement);     stu2Element->LinkEndChild(stu2AddressElement);       classElement->LinkEndChild(stu1Element);       classElement->LinkEndChild(stu2Element);       schoolElement->LinkEndChild(classElement);            doc.LinkEndChild(decl);       doc.LinkEndChild(schoolElement);      doc.SaveFile(xmlFile);   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved