使用TinyXML2進行xml文件操作

  • 簡介

TinyXML2適用於大部分的C/C++項目開發,經得住考驗,是最好的選擇。較TinyXML1而言,TinyXML2化繁爲簡,使用時只需要包含兩個文件,而TinyXML1需要6個文件,一般生成靜態鏈接庫供項目的使用。它使用更少的內存,更快,並使用更少的內存分配。

TinyXML2的優點: (1)對大部分大部分的C/C++項目具有普適性。 (2)使用較少的內存(約TinyXML1的40%),速度變得更快。 (3)沒有C++的STL的要求。 (4)更接近現代C++的特性,如使用了適當的命名空間。 (5)適當有效的處理了的空白字符(空格,TAB和回車)。

TinyXML1的優點: (1)可以報告分析錯誤的位置。 (2)提供一些C++ STL公約支持:流和字符串。 (3)擁有非常成熟和良好的調試代碼庫。

TinyXML2官網地址:http://www.grinninglizard.com/tinyxml2/index.html

#include "tinyxml2.h"
#include <iostream>


using namespace tinyxml2;
using namespace std;

bool createXml(const char* savepath)
{
	XMLDocument *doc = new XMLDocument;
	XMLDeclaration *declaration = doc->NewDeclaration("xml version=\"1.0\" encoding=\"utf-8\"");
	doc->LinkEndChild(declaration);

	XMLElement *Country = doc->NewElement("Country");
	doc->LinkEndChild(Country);
	Country->SetAttribute("name", "China");

	XMLElement *City = doc->NewElement("City");
	Country->LinkEndChild(City);
	City->SetAttribute("name", "BeiJing");

	XMLElement *People = doc->NewElement("People");
	City->LinkEndChild(People);
	People->SetAttribute("name", "張三");
	People->SetAttribute("number", "01");

	XMLElement *Gender = doc->NewElement("Gender");	
	XMLText * gender = doc->NewText("Man");
	Gender->LinkEndChild(gender);
	
	XMLElement *Address = doc->NewElement("Address");
	XMLText * address = doc->NewText("朝陽");
	Address->LinkEndChild(address);

	People->LinkEndChild(Gender);
	People->LinkEndChild(Address);

	People = doc->NewElement("People");
	City->LinkEndChild(People);
	People->SetAttribute("name", "李四");
	People->SetAttribute("number", "02");

	Gender = doc->NewElement("Gender");
	gender = doc->NewText("Woman");
	Gender->LinkEndChild(gender);

	Address = doc->NewElement("Address");
	address = doc->NewText("海淀");
	Address->LinkEndChild(address);

	People->LinkEndChild(Gender);
	People->LinkEndChild(Address);

	if (XML_SUCCESS != doc->SaveFile(savepath)) 
	{
		delete doc;
		return false;
	}

	delete doc;
	return true;
}
bool readXml(const char* filename)
{
	XMLDocument doc;
	if (XML_SUCCESS != doc.LoadFile(filename)) 
	{
		return false;
	}

	XMLElement *Country = doc.RootElement();
	if (Country)
	{
		cout << "School:" << Country->Attribute("name") << endl;

		XMLElement *City = Country->FirstChildElement("City");
		while (City)
		{
			cout << "City:" << City->Attribute("name") << endl;

			XMLElement *People = City->FirstChildElement("People");
			while (People)
			{
				cout << "People:" << People->Attribute("name") << ", " << People->Attribute("number") << endl;

				XMLElement* Gender = People->FirstChildElement("Gender");
				if (Gender)
				{
					cout << "Gender:" << Gender->GetText() << endl;
				}
				XMLElement* Address = People->FirstChildElement("Address");
				if (Address) 
				{
					cout << "Address:" << Address->GetText() << endl;
				}
				People = People->NextSiblingElement("People");
			}

			City = City->NextSiblingElement();
		}

	}
}

main函數

int main()
{
	char *path = "tmp.xml";
	createXml(path);
	readXml(path);
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章