TinyXML2的简单使用

配置文件的读取方面,以前是用最笨的方法,使用C语言按字符来读取,所以配置文件也很简单,就是一个文本文件,现在TinyXML2出来的,使得读取XML文件很轻松,所以也应该向这边去转变。
在使用TinyXML2之前,首先看一下XML文件的格式

<?xml version="1.0" encoding="UTF-8"?> //声明

//根节点
//第二层子节点
//第三层子节点,包含多个属性,以空格隔开



This is …


//第二层子节点

虽然我们的配置文件一次性设置好之后,基本上不需要经常修改,所以我们主要关注的是读取XML文件,但基本格式还是要清楚的
从上面来看,如果节点中没有描述,它的标识符只有一个,,如果节点中有属性,则在标识符后面直接添加属性,而当有节点描述,或还有子节点时,才会成对的出现。

#include "tinyxml2.h"
using namespace tinyxml2;
using namespace std;
void main()
{
	//创建XML的DOM对象
	XMLDocument doc;

	//创建一个声明,并加到DOM对象中
	XMLDeclaration* decl = doc.NewDeclaration();
	doc.InsertFirstChild(decl);

	//创建根节点
	XMLElement * root = doc.NewElement("Root");
	doc.LinkEndChild(root);

	//创建子节点
	XMLElement * Account = doc.NewElement("Account");
	doc.LinkEndChild(Account);
	XMLElement * Market = doc.NewElement("Market");
	doc.LinkEndChild(Market);

	//创建子节点
	tinyxml2::XMLElement* UserID = doc.NewElement("UserID");
	tinyxml2::XMLElement* BrokerID = doc.NewElement("BrokerID");
	tinyxml2::XMLElement* Passwd = doc.NewElement("Passwd");
	tinyxml2::XMLElement* IPAddr = doc.NewElement("IPAddr");
	tinyxml2::XMLElement* AppID = doc.NewElement("AppID");
	tinyxml2::XMLElement* AuthWord = doc.NewElement("AuthWord");

	//为每个节点添加属性,可以添加多个属性
	UserID->SetAttribute("UserID", "257...");
	UserID->SetAttribute("UserName", "Griffin");
	UserID->SetAttribute("UserType", "Futures Trader");

	BrokerID->SetAttribute("BrokerID", "43");
	Passwd->SetAttribute("Passwd", "5...");
	IPAddr->SetAttribute("IPAddr", "tcp://18...");
	AppID->SetAttribute("AppID", "clien0");
	AuthWord->SetAttribute("AuthWord", "Z.............");


	//每个节点添加描述内容,这部分可加可不加

	tinyxml2::XMLText* AppIDdescript = doc.NewText("This is .....");
	AppID->InsertFirstChild(AppIDdescript);

	//设计节点树
	//首先,最外一层是root,root下面有两层,分别为Account,Market
	//然后UserID  BrokerID等都在Account这一层下面

	root->InsertEndChild(Account);
	root->InsertEndChild(Market);

	Account->InsertEndChild(UserID);
	Account->InsertEndChild(BrokerID);
	Account->InsertEndChild(Passwd);
	Account->InsertEndChild(IPAddr);
	Account->InsertEndChild(AppID);
	Account->InsertEndChild(AuthWord);

	//如果文件已存在,则会覆盖掉原来的内容
	doc.SaveFile("Config.xml");
}

接下来就是读取XML文件了

	//创建XML的DOM对象
	XMLDocument xml;

	if (XML_SUCCESS != xml.LoadFile("madeByHand2.xml"))
	{
		return;
	}
	
	读取根节点
	tinyxml2::XMLElement* rootNode = xml.RootElement();
	if (rootNode == NULL) {
		return;
	}
	tinyxml2::XMLElement* Account = rootNode->FirstChildElement("Account");

	//读取根节点的下的第一个节点
	tinyxml2::XMLElement* UserID = Account->FirstChildElement("UserID");
	//再获取节点中的属性
	const XMLAttribute* user = UserID->FirstAttribute();
	//获取属性中的值
	string userId = user->Value();
	cout << userId.c_str() << endl;


	//如果一个节点有多个属性,则把指针往后移,指向下一个属性,再获取值
	user = user->Next();
	string userName = user->Value();
	cout << userName.c_str() << endl;

	//
	读取同一级别的下一个节点
	tinyxml2::XMLElement* BrokerID = UserID->NextSiblingElement("BrokerID");
	const XMLAttribute* broker = BrokerID->FirstAttribute();
	//获取属性中的值
	string sbroker = broker->Value();
	cout << sbroker.c_str() << endl;

由此,完成了配置文件的读写功能。

上一篇:使用c#循环遍历xml文件中的所有节点


下一篇:C#操作XML方法详解