TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯。這個解析庫的模型通過解析XML文件,然後在內存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。
DOM模型即文檔對象模型,是將整個文檔分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的順序關系以及嵌套包含關系。
然後解壓縮TinyXML後,將這六個文件添加到你的c++工程中,分別是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。
如本示例中,只有 main.cpp 才是測試代碼:
編寫代碼時,只需要包含 tinyxml.h 頭文件即可,但是,編譯時卻需要把所有.cpp 文件都加上。
示例代碼如下:
#include#include tinyxml.h #include #include using namespace std; /* TiXmlDocument:文檔類,它代表了整個xml文件 TiXmlDeclaration:聲明類,它表示文件的聲明部分 TiXmlComment:注釋類,它表示文件的注釋部分 TiXmlElement:元素類,它是文件的主要部分,並且支持嵌套結構,一般使用這種結構來分類的存儲信息,它可以包含屬性類和文本類 TiXmlAttribute/TiXmlAttributeSet:元素屬性,它一般嵌套在元素中,用於記錄此元素的一些屬性 TiXmlText:文本對象,它嵌套在某個元素內部 */ //創建xml文件 int writeXmlFile() { TiXmlDocument *writeDoc = new TiXmlDocument; //xml文檔指針 //文檔格式聲明 TiXmlDeclaration *decl = new TiXmlDeclaration(1.0, UTF-8, yes); writeDoc->LinkEndChild(decl); //寫入文檔 int n = 3; //父節點個數 TiXmlElement *RootElement = new TiXmlElement(Info);//根元素 RootElement->SetAttribute(num, n); //屬性 writeDoc->LinkEndChild(RootElement); for(int i=0; i SetAttribute(class,A); if(2 == i) { StuElement->SetAttribute(class,B); } StuElement->SetAttribute(id,i+1); StuElement->SetAttribute(flag, (i+1)*10); RootElement->LinkEndChild(StuElement);//父節點寫入文檔 //姓名 TiXmlElement *nameElement = new TiXmlElement(name); StuElement->LinkEndChild(nameElement); TiXmlText *nameContent = new TiXmlText(mike); nameElement->LinkEndChild(nameContent); //分數 TiXmlElement *scoreElement = new TiXmlElement(score); StuElement->LinkEndChild(scoreElement); TiXmlText *scoreContent = new TiXmlText(88); scoreElement->LinkEndChild(scoreContent); //城市 TiXmlElement *cityElement = new TiXmlElement(city); StuElement->LinkEndChild(cityElement); TiXmlText *cityContent = new TiXmlText(Shenzhen); cityElement->LinkEndChild(cityContent); } writeDoc->SaveFile(stu_info.xml); delete writeDoc; return 1; } //解析xml文件 int readXmlFile() { TiXmlDocument mydoc(stu_info.xml);//xml文檔對象 bool loadOk=mydoc.LoadFile();//加載文檔 if(!loadOk) { cout< Value() << ; TiXmlElement *pEle=RootElement; //遍歷該結點 for(TiXmlElement *StuElement = pEle->FirstChildElement();//第一個子元素 StuElement != NULL; StuElement = StuElement->NextSiblingElement())//下一個兄弟元素 { // StuElement->Value() 節點名稱 cout<< StuElement->Value() << ; TiXmlAttribute *pAttr=StuElement->FirstAttribute();//第一個屬性 while( NULL != pAttr) //輸出所有屬性 { cout< Name()<<:< Value()<< ; pAttr=pAttr->Next(); } cout< FirstChildElement(); sonElement; sonElement=sonElement->NextSiblingElement()) { cout< FirstChild()->Value()<
編譯運行結果如下:
生成的xml文件內容如下:
mike 88 Shenzhen mike 88 Shenzhen mike 88 Shenzhen