tinyxml 读取文本节点_体验TinyXML读写XML文件数据 | 学步园

前一阵子做一个客服回复玩家问题工具,要用到读写XML文件的数据,同事推荐用TinyXML,于是,开始了我与TinyXML的亲密之旅。

先简单说说配置:首先下载TinyXML库的文件,然后在 TinyXML 的目录里面找到tinystr.h, tinyxml.h,tinystr.cpp,tinyxml.cpp, tinyxmlerror.cpp,tinyxmlparser.cpp六个文件加入到自己的项目中去,在相应的工程文件中加入两个头文件 #include "tinyxml.h" ,#include "tinystr.h",在 tinystr.cpp,tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp四个文件的第一行加入头文件

#include "stdafx.h",然后即可使用TinyXML编程。

要读取的xml 数据如下:

100

test 1

200

test 2

注意要将 encoding设为gb2312格式,我一开始设置的是utf-8,结果遇到在程序里

写入中文没问题, 但在读出该中文时却有异常,把后面的 符号也当作值读出来

了,后来和一同事讨论后才知道是编码问题。

stringfilefullPath= 要读取xml文件的绝对路径

//创建文件对象

TiXmlDocument *myDocument=newTiXmlDocument(filefullPath.c_str());

//加载文件数据

myDocument->LoadFile();

//获取根节点

TiXmlElement *RootElement=myDocument->RootElement();

以下是简单的读取操作:

//第一个子节点

TiXmlElement *CurrentPerson=RootElement->FirstChildElement();

//遍历获取指定节点数据

while(CurrentPerson)

{

//子节点第一个属性 id

TiXmlElement *IdElement=CurrentPerson->FirstChildElement();

//第一个属性的值

intnodeID=atoi(IdElement->FirstChild()->Value());

//子节点第二个属性 title

TiXmlElement *TitleElement=IdElement->NextSiblingElement();

//第二个属性的值

CStringnodeTitle=TitleElement->FirstChild()->Value();

.....................

如果还有后续节点,依次读取

.....................

维护读出的数据

.....................

//指向下一节点

CurrentPersonCurrentPerson= CurrentPerson->NextSiblingElement();

}

以下是增加xml记录的操作,例如要增加 id 为 300,title 为 test3 的记录:

//创建节点对象

TiXmlElement *PersonElement=newTiXmlElement("prop");

//链接到根节点

RootElement ->LinkEndChild(PersonElement);

//创建节点对象的属性节点

TiXmlElement *IdElement=newTiXmlElement("id");

TiXmlElement *TitleElement=newTiXmlElement("title");

//将属性节点链接到子节点

PersonElement->LinkEndChild(IdElement);

PersonElement->LinkEndChild(TitleElement);

//创建属性对应数值对象

TiXmlText *idContent=newTiXmlText("300");

TiXmlText *titleContent=newTiXmlText("test3");

//将数值对象关联到属性节点

IdElement->LinkEndChild(idContent);

TitleElement->LinkEndChild(titleContent);

//保存到文件

myDocument->SaveFile(m_filefullPath.c_str());

以下是删除记录操作,例如要删除id为300 的记录:

//获取当前要删除的节点

TiXmlElement *childElement= 根据id从自己读取时缓存的数据中获得

//从根节点移除子节点

RootElement->RemoveChild(childElement);

//保存文件

myDocument->SaveFile(m_filefullPath.c_str());

学习TinyXML主要是要理解其节点的层次关系,通晓其筋脉,则运用自如。

原文链接:http://www.cnblogs.com/skydesign/archive/2011/11/08/2240528.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值