TinyXML2開源庫使用

來源:互聯網
上載者:User
相關文章

TinyXML2 學習: http://www.tuicool.com/articles/uYBB7j

C++使用tinyxml建立和解析xml檔案(本文用於cocos2dx):http://blog.csdn.net/u012234115/article/details/38643259 聲明

我是由於工作原因使用的tinyXML,源碼是直接由老大提供給我的,與網上流傳的不太一樣,所以我也不知道下載連結在哪,但是我會在文章末尾附帶的源碼
前言
TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯,使用TinyXML進行C++ XML解析,使用簡單,容易上手。這個解析庫的模型通過解析XML檔案,然後在記憶體中產生DOM模型,從而讓我們很方便的遍曆這棵XML樹。 DOM模型即文件物件模型,是將整個文檔分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的循序關聯性以及嵌套內含項目關聯性。
TinyXML介紹
在TinyXML中,根據XML的各種元素來定義了一些類:    XmlBase:整個TinyXML模型的基類。    XmlAttribute:對應於XML中的元素的屬性。    XmlNode:對應於DOM結構中的節點。    XmlComment:對應於XML中的注釋。    XmlDeclaration:對應於XML中的申明部分,即<。versiong="1.0" ?>。    XmlDocument:對應於XML的整個文檔。    XmlElement:對應於XML的元素。    XmlText:對應於XML的文字部分。    XmlUnknown:對應於XML的未知部分。     XmlHandler:定義了針對XML的一些操作。
應用執行個體
通過對下面這個XML進行建立,讀取來熟悉API
<?xml version="1.0"?>  <School name="軟體學院">      <Class name = "C++">          <Student name="tinyxml" number="123">              <email>tinyxml@163.com</email>              <address>中國</address>                   </Student>          <Student name="jsoncpp" number="456">              <email>jsoncpp@gmail.com</email>              <address>美國</address>                   </Student>      </Class>  </School> 
建立XML
bool createXML(){    XMLDocument *doc = new XMLDocument;    XMLDeclaration *declaration = doc->NewDeclaration("xml version=\"1.0\" encoding=\"GBK\"");    doc->LinkEndChild(declaration);    XMLElement *eleSchool = doc->NewElement("School");    doc->LinkEndChild(eleSchool);    eleSchool->SetAttribute("name", "軟體學院");    //設定屬性    XMLElement *eleClass = doc->NewElement("Class");    eleSchool->LinkEndChild(eleClass);  //掛在School節點上    eleClass->SetAttribute("name", "C++");    //------------------------------第一個學生    XMLElement *eleStudent = doc->NewElement("Student");    eleClass->LinkEndChild(eleStudent); //掛在School節點上    //可以設定多個屬性    eleStudent->SetAttribute("name", "tinyxml");    eleStudent->SetAttribute("number", 123);    XMLElement *eleEmail = doc->NewElement("email");    eleStudent->LinkEndChild(eleEmail);    XMLText *texEmail = doc->NewText("tinyxml@163.com");    eleEmail->LinkEndChild(texEmail);    XMLElement *eleAddress = doc->NewElement("address");    eleStudent->LinkEndChild(eleAddress);    XMLText *texAddress = doc->NewText("中國");    eleAddress->LinkEndChild(texAddress);    //------------------------------第二個學生    XMLElement *eleStudent1 = doc->NewElement("Student");    eleClass->LinkEndChild(eleStudent1);    //掛在School節點上    eleStudent1->SetAttribute("name", "jsoncpp");    eleStudent1->SetAttribute("number", 456);    XMLElement *eleEmail1 = doc->NewElement("email");    eleStudent1->LinkEndChild(eleEmail1);    XMLText *texEmail1 = doc->NewText("jsoncpp@gmail.com");    eleEmail1->LinkEndChild(texEmail1);    XMLElement *eleAddress1 = doc->NewElement("address");    eleStudent1->LinkEndChild(eleAddress1);    XMLText *texAddress1 = doc->NewText("美國");    eleAddress1->LinkEndChild(texAddress1);    if (XML_SUCCESS != doc->SaveFile("e:/tmp.xml")) {        delete doc;        return false;    }    doc->SaveFile("e:/tmp.xml");    delete doc;    return true;}
讀取
bool ReadXml(){    XMLDocument doc;    if (XML_SUCCESS != doc.LoadFile("e:/tmp.xml"))  //載入XML失敗  返回false    {        return false;    }    XMLElement *eleSchool = doc.RootElement();  //擷取根節點    if (eleSchool)    {        cout << "School:" << eleSchool->Attribute("name") << endl;        XMLElement* eleClass = eleSchool->FirstChildElement("Class");        while (eleClass)        {            cout << "  Class:" << eleClass->Attribute("name") << endl;            XMLElement* eleStudent = eleClass->FirstChildElement("Student");            while (eleStudent)            {                cout << "    Student:" << eleStudent->Attribute("name") << ", " << eleStudent->Attribute("number") << endl;                XMLElement* eleEmail = eleStudent->FirstChildElement("email");                if (eleEmail)                {                    cout << "      Email:" << eleEmail->GetText() << endl;                }                XMLElement* eleAddress = eleStudent->FirstChildElement("address");                if (eleAddress)                {                    cout << "      Address:" << eleAddress->GetText() << endl;                }                eleStudent = eleStudent->NextSiblingElement("Student");            }            eleClass = eleClass->NextSiblingElement();        }    }}
XMLDocument::Parse( const char* p, size_t len )這個函數可以直接解析XML格式的字串FirstChildElement(const char* value=0):擷取第一個值為value的子節點,value預設值為空白,則返回第一個子節點。RootElement():擷取根節點,相當於FirstChildElement的空參數版本;const XMLAttribute* FirstAttribute() const:擷取第一個屬性值;XMLHandle NextSiblingElement( const char* _value=0 ) :獲得下一個節點。
下載地址
連結: http://pan.baidu.com/s/1pKDiU4V 密碼: ea72

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.