tinyxml的封装与使用(转载)
tinyxml是个高效精简的xml解析开源代码.
针对tinyxml直接使用对于对xml不是很熟悉的入门新手来说,有些概念难以理解,因此我将其封装后,供大家使用.
头文件:
#include "tinystr.h"
#include "tinyxml.h" using namespace std; class CXML { public: CXML(void) { } ~CXML(void) { } private: TiXmlDocument m_xml; TiXmlElement* pElement; private: TiXmlElement* getFirstElement(string ElementMark,TiXmlElement* pcrElement); public: //解析xml字符串 int ParseXmlStr(string xmlstr); //解析xml文件 int ParseXmlFile(string xmlFile); //根据标签取值 int getFirstElementValue(string ElementMark,string& value); //针对同一标签的记录取值,如果返回值是0表明再无此标签内容值可取 int getNextElementValue(string ElementMark,string& value); //取得属性值 int getElementAttributeValue(string AttributeName,string& value); //获取根结点 TiXmlElement* getRootElement(); //返回当前的xml字符串 string getXmlStr(); //清空解析的内容 void Clear(); //添加子节点 TiXmlElement* addXmlRootElement(string ElementMark);//添加一个根节点 //添加子节点 TiXmlElement* addXmlChildElement(TiXmlElement* pElement,string ElementMark); //给节点添加值 void addElementValue(TiXmlElement* pElement,string value); //添加属性及属性值 void addXmlAttribute(TiXmlElement* pElement,string AttributeMark,string value); //添加声明 void addXmlDeclaration(string vesion,string encoding,string standalone); //添加注释 void addXmlComment(TiXmlElement* pElement,string Comment); //将xml内容保存到文件 void saveFile(string FileName); };
///////////////////实现文件
#include "XML.h" int CXML::ParseXmlFile(string xmlFile) { int result=; try { if(m_xml.LoadFile(xmlFile.c_str())) result=; else result=; } catch(...) { } return result; } int CXML::ParseXmlStr(std::string xmlStr) { int result=; if(xmlStr=="") return ; try { if(m_xml.Parse(xmlStr.c_str())) result=; else result=; } catch(...) { } return result; } TiXmlElement* CXML::getFirstElement(string ElementMark,TiXmlElement* pcrElement) { TiXmlElement* pElementtmp=NULL; pElementtmp=pcrElement; while(pElementtmp) { if(strcmp(pElementtmp->Value(),ElementMark.c_str())==) { //printf("%s\r\n",pElementtmp->Value()); return pElementtmp; } else { TiXmlElement* nextElement=pElementtmp->FirstChildElement(); while(nextElement) { //printf("%s\r\n",nextElement->Value()); if(strcmp(nextElement->Value(),ElementMark.c_str())==) { return nextElement; } else { TiXmlElement* reElement=NULL; reElement=getFirstElement(ElementMark,nextElement); if(reElement) { return reElement; } } nextElement=nextElement->NextSiblingElement(); } } pElementtmp=pElementtmp->NextSiblingElement(); } return NULL; } //根据标签取值 int CXML::getFirstElementValue(string ElementMark,string& value) { int result=; if(ElementMark=="") return ; try { TiXmlElement* pcrElement=NULL; pcrElement=m_xml.RootElement(); pcrElement=this->getFirstElement(ElementMark,pcrElement); if(pcrElement) { this->pElement=pcrElement; value=this->pElement->GetText(); result=; } } catch(...) { } return result; } int CXML::getNextElementValue(string ElementMark,string& value) { value=""; this->pElement=this->pElement->NextSiblingElement(ElementMark.c_str()); if(this->pElement) { value=this->pElement->GetText(); return ; } return ; } string CXML::getXmlStr() { string result=""; try { TiXmlPrinter printer; m_xml.Accept(&printer); result=printer.CStr(); } catch(...) { } return result; } void CXML::Clear() { m_xml.Clear(); } //添加子节点 TiXmlElement* CXML::addXmlRootElement(string ElementMark) { TiXmlElement* RootElement=new TiXmlElement(ElementMark.c_str()); m_xml.LinkEndChild(RootElement); return RootElement; } TiXmlElement* CXML::addXmlChildElement(TiXmlElement* pElement,string ElementMark) { if(pElement) { TiXmlElement* tempElement=new TiXmlElement(ElementMark.c_str()); pElement->LinkEndChild(tempElement); return tempElement; } return ; } void CXML::addElementValue(TiXmlElement *pElement, std::string value) { if(pElement) { TiXmlText *pContent=new TiXmlText(value.c_str()); pElement->LinkEndChild(pContent); } } //添加属性及属性值 void CXML::addXmlAttribute(TiXmlElement* pElement,string AttributeMark,string value) { if(pElement) { pElement->SetAttribute(AttributeMark.c_str(),value.c_str()); } } //添加声明 void CXML::addXmlDeclaration(string vesion,string encoding,string standalone) { TiXmlDeclaration *pDeclaration=new TiXmlDeclaration(vesion.c_str(),encoding.c_str(),standalone.c_str()); m_xml.LinkEndChild(pDeclaration); } //添加注释 void CXML::addXmlComment(TiXmlElement* pElement,string Comment) { if(pElement) { TiXmlComment *pComment=new TiXmlComment(Comment.c_str()); pElement->LinkEndChild(pComment); } } TiXmlElement* CXML::getRootElement() { return m_xml.RootElement(); } //取得属性值 int CXML::getElementAttributeValue(string AttributeName,string& value) { if(this->pElement->Attribute(AttributeName.c_str())) { value=this->pElement->Attribute(AttributeName.c_str()); return ; } return ; } void CXML::saveFile(string FileName) { this->m_xml.SaveFile(FileName.c_str()); }
注意:
xml字符串如果不是从文件中读出,那么必须以"\r\n"结束,否则解析失败
tinyxml的封装与使用(转载)的更多相关文章
- Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口 .-- 转载
Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创建简单的按钮.相应事件 Unity C# 代码 using UnityEngine; using Sy ...
- 编译使用tinyxml
环境: win7 32位旗舰版,VS2010,tinyxml_2_6_2版本 1.下载tinyxml,并解压到tinyxml文件夹下 2.生成动态链接库 原生的Tinyxml只支持静态库(没有在.h文 ...
- C++使用TinyXML
参照一:http://qaohao.iteye.com/blog/496237 参照二:http://hi.baidu.com/lnylvoeegzcgnrr/item/af68fd9cde40fc1 ...
- 像使用数据库一样使用xml
目录 xml简介 语言结构 tinyxml 下载tinyxml 应用实例 tinyxml的封装 封装源码 实际应用 xml简介 XML 没什么特别的.它仅仅是纯文本而已.有能力处理纯文本的软件都可以处 ...
- 使用 json 模块,使json数据格式与Python字典dict数据格式互相转换,获取数据更加方便
一.定义 JSON 是一种数据格式 使用 javaScript (Java 死鬼破特)对象表示法 二.特点 1.JSON 与 XML格式数据的区别 ====== 两种格式的数据,都是跨语言,跨平台 c ...
- 将HTML5封装成android应用APK文件的几种方法(转载)
越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...
- [转载]Vivado轻松实现IP封装
Vivado轻松实现IP封装 1.新建一个测试工程 工程化的设计方法是离不开工程的,第一步往往都是新建工程,后面我会学习去工程化的开发方法,可能会更加高效. 2.利用向导完成IP封装 2.1.启动IP ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- 将TinyXml快速入门的接口面向对象化(转载)
作者:朱金灿 来源:http://www.cnblogs.com/clever101 在TinyXml快速入门的系列文章中(详情见本博客),我只是将tinyxml类库解析xml文件的类封装为API接口 ...
随机推荐
- ArcGIS API for JavaScript 4.2学习笔记[19] 搜索小部件——使用更多数据源
上一篇中提到,空间搜索小部件是Search这个类的实例化,作为视图的ui属性添加进去后,视图就会出现搜索框了. 这节的主体代码和上篇几乎一致,区别就在上篇提及的sources属性. 先看看结果: 由于 ...
- 开源API测试工具 Hitchhiker v0.7更新 - Schedule的对比diff
Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试Ap ...
- 《重新定义公司 - Google 是如何运营的》重点摘录
赋能:创意时代的组织原则 未来企业的成功之道,是聚集一批聪明的创意精英,营造合适的氛围和支持环境,充分发挥他们的创造力,快速感知用户需求,愉快地创造响应的产品和服务.未来组织的最重要功能,那就是赋 ...
- CKEditor 集成CKFinder集成
lCKEditor原名FckEditor,著名的HTML编辑器,可以在线编辑HTML内容,演示一下.打开.自己人用CKEditor,网友用UBBEditor. l配置参考文档,主要将ckeditor中 ...
- RabbitMQ教程(一) ——win7下安装RabbitMQ
RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; 下载RabbitMQ,下载地址: rabbitmq-server-3.5.6.exe和erlang,下载地址:o ...
- webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema
最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可
- 【ASP.NET Core】运行原理(4):授权
本系列将分析ASP.NET Core运行原理 [ASP.NET Core]运行原理(1):创建WebHost [ASP.NET Core]运行原理(2):启动WebHost [ASP.NET Core ...
- Python 词云分析周杰伦《晴天》
一.前言满天星辰的夜晚,他们相遇了...夏天的时候,她慢慢的接近他,关心他,为他付出一切:秋天的时候,两个人终於如愿的在一起,分享一切快乐的时光但终究是快乐时光短暂,因为杰伦必须出国深造,两人面临了要 ...
- 初学Python之 布尔类型
与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ==> True True and False # ==> False False an ...
- angular4.0微信oAuth第三方认证的正确方式
当我们的项目运行在微信端时,用到oAuth第三方认证.问题来了,在ng4中微信认证应该放在哪里呢? 开始项目的时候,我将oAuth认证放在了每个页面模版中,发现返回历史页的时候,需要返回两次. 这个问 ...