- 簡介
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;
}