加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

体验TinyXML读写XML文件数据

发布时间:2020-12-16 04:59:27 所属栏目:百科 来源:网络整理
导读:前一阵子做一个客服回复玩家问题工具,要用到读写XML文件的数据,同事推荐用TinyXML,于是,开始了我与TinyXML的亲密之旅。 先简单说说配置:首先下载TinyXML库的文件,然后在 TinyXML 的目录里面找到tinystr.h, tinyxml.h,tinystr.cpp,tinyxml.cpp, tin

前一阵子做一个客服回复玩家问题工具,要用到读写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 数据如下:

 
 
  1. <?xmlversion="1.0"encoding="gb2312"standalone="yes"?>
  2. <rootxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <prop>
  4. <id>100</id>
  5. <title>test1</title>
  6. </prop>
  7. <prop>
  8. <id>200</id>
  9. <title>test2</title>
  10. </prop>
  11. </root>

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

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

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

 
 
  1. stringfilefullPath=要读取xml文件的绝对路径
  2. //创建文件对象
  3. TiXmlDocument*myDocument=newTiXmlDocument(filefullPath.c_str());
  4. //加载文件数据
  5. myDocument->LoadFile();
  6. //获取根节点
  7. TiXmlElement*RootElement=myDocument->RootElement();

以下是简单的读取操作:

 
 
  1. //第一个子节点
  2. TiXmlElement*CurrentPerson=RootElement->FirstChildElement();
  3. //遍历获取指定节点数据
  4. while(CurrentPerson)
  5. {
  6. //子节点第一个属性id
  7. TiXmlElement*IdElement=CurrentPerson->FirstChildElement();
  8. //第一个属性的值
  9. intnodeID=atoi(IdElement->FirstChild()->Value());
  10. //子节点第二个属性title
  11. TiXmlElement*TitleElement=IdElement->NextSiblingElement();
  12. //第二个属性的值
  13. CStringnodeTitle=TitleElement->FirstChild()->Value();
  14. .....................
  15. 如果还有后续节点,依次读取
  16. .....................
  17. 维护读出的数据
  18. .....................
  19. //指向下一节点
  20. CurrentPersonCurrentPerson=CurrentPerson->NextSiblingElement();
  21. }

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

 
 
  1. //创建节点对象
  2. TiXmlElement*PersonElement=newTiXmlElement("prop");
  3. //链接到根节点
  4. RootElement->LinkEndChild(PersonElement);
  5. //创建节点对象的属性节点
  6. TiXmlElement*IdElement=newTiXmlElement("id");
  7. TiXmlElement*TitleElement=newTiXmlElement("title");
  8. //将属性节点链接到子节点
  9. PersonElement->LinkEndChild(IdElement);
  10. PersonElement->LinkEndChild(TitleElement);
  11. //创建属性对应数值对象
  12. TiXmlText*idContent=newTiXmlText("300");
  13. TiXmlText*titleContent=newTiXmlText("test3");
  14. //将数值对象关联到属性节点
  15. IdElement->LinkEndChild(idContent);
  16. TitleElement->LinkEndChild(titleContent);
  17. //保存到文件
  18. myDocument->SaveFile(m_filefullPath.c_str());

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

 
 
  1. //获取当前要删除的节点
  2. TiXmlElement*childElement=根据id从自己读取时缓存的数据中获得
  3. //从根节点移除子节点
  4. RootElement->RemoveChild(childElement);
  5. //保存文件
  6. myDocument->SaveFile(m_filefullPath.c_str());

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读