在C++中Tinyxml的基本使用

1:用程序打开xml文件

该xml文件的名称是“Base.xml”,用CString  strFileName存储

TiXmlDocument   *XMLDoc = 0;
TiXmlElement   *XMLRoot;
//如果不进行字符串的转换,会打不开文件
CStringA pt = CT2A(strFileName);
XMLDoc = new TiXmlDocument(pt);
bool loadOk=XMLDoc->LoadFile();
if( !loadOk )
{
	delete XMLDoc;
	return false;
}
delete XMLDoc;
return true;


2:循环读取xml文件中的内容

首先需要获取根节点的信息

XMLRoot = XMLDoc->RootElement();


再进行读取

TiXmlElement *pElement = nullptr;
pElement = XMLRoot->FirstChildElement("InterrInfo");
while(pElement)
{
	pElement = pElement->NextSiblingElement("InterrInfo");
}


目前,我只是给出了最简单的读取形式,如果有其他需要可以对这个循环进行扩展。

3:查找指定的节点。

无论是插入数据、删除数据、还是修改数据内容。都避免不了的需要找到需要插入的位置。

目前,我把查找这个功能写成了一个函数,方便多次调用。

如果有需要可以进行借鉴。

bool CMyXmlDlg::FindNode(TiXmlElement  *XmlNodeParent , TiXmlElement* & XmlNode , TiXmlElement* &XmlParent,NodeInfoST  nodeInfo)
{
	TiXmlElement *pElement;
	pElement = XmlNodeParent->FirstChildElement("InterrInfo");
	while(pElement)
	{
		XmlParent = XmlNodeParent;
		int nID = getAttribFloat_ID(pElement,"ID");
		if (nID == nodeInfo.nID)
		{
			XmlNode	= pElement;
			return true;
		}
		else
		{
			if(FindNode(pElement, XmlNode ,XmlParent ,nodeInfo) == true)
			{
				break;
				return true;
			}
			else
				pElement = pElement->NextSiblingElement("InterrInfo");
		}
	}
	return false;
}


上面代码的主要意思是:在xml文件中循环查找。当找到我传入的NodeInfoST结构体中的ID和当前ID相同时,返回节点指针以及该节点对应的父节点。

4:插入数据

在根据上面的函数找到对应的节点后,进行数据的插入

//因为要插入数据,所以需要在查找的位置,也就是pNode位置,重新创建出一个节点
TiXmlElement *PersonElement = new TiXmlElement("InterrInfo");
pNode->LinkEndChild(PersonElement);
//插入数据。如果该数据是int类型,不需要进行类型转换
PersonElement->SetAttribute("ID",ChildInfo.nID);
//如果插入的数据是CStirng类型,不进行转换会出现乱码错误。
//主要原因是编码问题。
//在此,我用了UCS  转成utf8 格式。如果有需要,可以查看我的“类型转换”中。里面有详细转换方式。仅供参考
CString   strQuestion = L"测试例子";
CStringA strAQuestion = CT2A(strQuestion);
UcsToUtf8(strQuestion,strAQuestion);
PersonElement->SetAttribute("Question",strAQuestion);


5:删除数据

bool  flag =  pParentNode->RemoveChild(pNode);


查找到对应的节点,直接删除就可以。

6:修改节点的数据

此时的做法和插入数据的方法类似。只是不需要创建新的节点。只是修改数据就行了。

使用SetAttribute修改数据

7:保存修改的内容

bool  isFlage =  XMLDoc->SaveFile(ptPathName);

当isFlage == true时,表示保存成功了

对于C++程序中的xml操作,每次进行操作后,都需要对改动的内容进行保存。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值