程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++通過TinyXML類庫讀寫XML文件

C++通過TinyXML類庫讀寫XML文件

編輯:關於C++

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; iSetAttribute(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
    

 

 

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