1. 程式人生 > >用tinyxml建立xml檔案

用tinyxml建立xml檔案

        首先準備好tinyxml庫中的六個檔案(tinystr.cpp  tinyxml.cpp  tinyxmlerror.cpp  tinyxmlparser.cpp  tingystr.h  tinyxml.h),這個百度一下就有了,因為不能上傳附件,所以只能自己百度了,有需要可以給我留個言

要得到config.xml檔案,建立在工程除錯的目錄中

config.xml檔案如下:

<?xml version="1.0" encoding="gb2312" ?>
<matrixs>
    <matrix id="111">矩陣</matrix>
    <matrix id="222">矩陣</matrix>
    <matrix id="333">矩陣</matrix>
</matrixs>

1、將這六個檔案新增到所要用的工程中

2、編寫程式碼

#include "tinystr.h"
#include "tinyxml.h"
#include <iostream>
#include <string>
#include "windows.h"
#define MAX_PATH 260
using namespace std;
int main()
{
	//獲取除錯Debug資料夾下的目錄地址
	string sFilefullPath;
	char xmlpath[MAX_PATH]={0};
	char lpszFilePath[MAX_PATH] = {0};
	char lpszDriver[_MAX_DRIVE], lpszDir[MAX_PATH], lpszFileName[_MAX_FNAME], lpszExt[_MAX_EXT];
	int nLen = GetModuleFileName(NULL, lpszFilePath, MAX_PATH);
	if(nLen != 0){
		_splitpath(lpszFilePath, lpszDriver, lpszDir, lpszFileName, lpszExt);
		memset(lpszFilePath, 0, sizeof(lpszFilePath));
		strcat(lpszFilePath, lpszDriver);
		strcat(lpszFilePath, lpszDir);		
	}
	nLen = strlen(lpszFilePath);
	if(nLen >1)
	{
		if('\\' != lpszFilePath[nLen-1])
		{
			strcat(lpszFilePath,"\\");
		}	
		strcat(xmlpath,lpszFilePath);
		strcat(xmlpath, "config.xml");
		sFilefullPath=xmlpath;
	}
//這時得到config.xml的路徑為sFilefullPath
	//新建xml檔案
	TiXmlDocument doc;
	TiXmlDeclaration *dec=new TiXmlDeclaration("1.0","gb2312","");
	TiXmlElement *matrixs=new TiXmlElement("matrixs");
	doc.LinkEndChild(dec);
	doc.LinkEndChild(matrixs);

	TiXmlElement *matrix1 = new TiXmlElement("matrix");
	matrixs->LinkEndChild(matrix1);
	string strName1="矩陣";
	TiXmlText *pStrName1=new TiXmlText(strName1.c_str());
	matrix1->LinkEndChild(pStrName1);
	matrix1->SetAttribute("id",111);

	TiXmlElement *matrix2 = new TiXmlElement("matrix");
	matrixs->LinkEndChild(matrix2);
	string strName2="矩陣";
	TiXmlText *pStrName2=new TiXmlText(strName2.c_str());
	matrix2->LinkEndChild(pStrName2);
	matrix2->SetAttribute("id",222);

	TiXmlElement *matrix3 = new TiXmlElement("matrix");
	matrixs->LinkEndChild(matrix3);
	string strName3="矩陣";
	TiXmlText *pStrName3=new TiXmlText(strName3.c_str());
	matrix3->LinkEndChild(pStrName3);
	matrix3->SetAttribute("id",333);
	doc.SaveFile(sFilefullPath.c_str());

	//讀取  在控制檯中輸出屬性
	TiXmlDocument *myDocument = new TiXmlDocument(sFilefullPath.c_str());
	myDocument->LoadFile();
	TiXmlNode *RootElement = myDocument->RootElement();
	TiXmlNode *root=myDocument->FirstChild("matrixs");
	TiXmlElement *child;
	for (child = root->FirstChildElement("matrix");child != 0;child = child->NextSiblingElement("matrix"))
	{
		string typeAttribute = child ->Attribute("id");
		cout<<typeAttribute<<endl;
	}
	return 0;
}