TinyXML2 使用


TinyXML2

TinyXML2
TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯,使用TinyXML進行C++ XML解析,使用簡單,容易上手。
這個解析庫的模型通過解析XML文件,然后在內存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。
DOM模型即文檔對象模型,是將整個文檔分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的順序關系以及嵌套包含關系。

在TinyXML中,根據XML的各種元素來定義了一些類:

XmlBase:整個TinyXML模型的基類。
XmlAttribute:對應於XML中的元素的屬性。
XmlNode:對應於DOM結構中的節點。
XmlComment:對應於XML中的注釋。
XmlDeclaration:對應於XML中的申明部分,即<?versiong="1.0" ?>。
XmlDocument:對應於XML的整個文檔。
XmlElement:對應於XML的元素。
XmlText:對應於XML的文字部分。
XmlUnknown:對應於XML的未知部分。 
XmlHandler:定義了針對XML的一些操作。   

Demo

// ConsoleApplication1.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#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 *School = doc->NewElement("School");
	doc->LinkEndChild(School);
	School->SetAttribute("name","機械工程學院");

	XMLElement *Class = doc->NewElement("Class");
	School->LinkEndChild(Class);
	Class->SetAttribute("name","c++");

	XMLElement *Student = doc->NewElement("Student");
	Class->LinkEndChild(Student);
	Student->SetAttribute("name","天霸");
	Student->SetAttribute("number", "01");

	XMLElement *Email = doc->NewElement("Email");
	Student->LinkEndChild(Email);
	XMLText * email = doc->NewText("TB@126.com");
	Email->LinkEndChild(email);

	XMLElement *Address = doc->NewElement("Address");
	Student->LinkEndChild(Address);
	XMLText * address = doc->NewText("中國遼寧");
	Address->LinkEndChild(address);

	XMLElement *Student_1 = doc->NewElement("Student");
	Class->LinkEndChild(Student_1);
	Student_1->SetAttribute("name", "動霸");
	Student_1->SetAttribute("number", "02");

	XMLElement *Email_1 = doc->NewElement("Email");
	Student_1->LinkEndChild(Email_1);
	XMLText * email_1 = doc->NewText("DB@126.com");
	Email_1->LinkEndChild(email_1);

	XMLElement *Address_1 = doc->NewElement("Address");
	Student_1->LinkEndChild(Address_1);
	XMLText * address_1 = doc->NewText("中國香港");
	Address_1->LinkEndChild(address_1);


	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 *School = doc.RootElement();
	if (School){
		cout << "School:" << School->Attribute("name") << endl;

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

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

				XMLElement* Email = Student->FirstChildElement("email");
				if (Email){
					cout << "		Email:" << Student->GetText() << endl;
				}
				XMLElement* Address = Student->FirstChildElement("address");
				if (Address){
					cout << "		Address:" << Address->GetText() << endl;
				}
				Student = Student->NextSiblingElement("Student");
			}

			Class = Class->NextSiblingElement();
		}

	}
}


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM