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接口 ...
随机推荐
- shell if相关参数
[ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ ...
- 538. Convert BST to Greater Tree
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...
- 【Socket】苍老师有了丈夫,我也有了SAEA
一.前言 时间过得真是快,转眼就2018年了.首先祝各位博友,软件开发者新年新气象,事业有成,身体健康,阖家幸福!最近看到园子里好多关于自己的2017年度总结以及对自己新一年的愿景,觉得 ...
- lesson - 10 shell 基础知识
课程大纲: 1. shell特性 命令历史 history !! !$ !n !字符 Tab 键可以补全文件路径或者命令 alias a=“b” unalias a 通配符 *匹配零个或多个 ...
- LANMP On CentOS 6
摘要 --在CentOS6.2-x86_64上安装Apache,Nginx,MySQL,Php 环境:最小化安装系统 yum install lrzsz mlocate.x86_64 wget lso ...
- ubuntu 安装 pythonenv
This will get you going with the latest version of pyenv and make it easy to fork and contribute any ...
- C++ qsort
使用qsort 需要包含头文件#include<algorithm> 例子: class Wooden{ public: int weight; int length; bool flag ...
- MySQL一对一:一对多:多对多: 实例!!!!
学生表和课程表可以多对多 一个学生可以学多门课程 一门课程可以有多个学生: 多对多 *** 一个学生对应一个班级 一个班级对应多个学生: 一对多 *** 一个老师对应多个学生 多个学生对应一个老师:一 ...
- Java中对List<E>按E的属性排序的简单方法
这是LeetCode上的题目56. Merge Intervals中需要用到的, 简单来说,定义了E为 /** * Definition for an interval. * public class ...
- jQuery 核心函数 (十一)
函数 描述 jQuery() 接受一个字符串,其中包含了用于匹配元素集合的 CSS 选择器. jQuery.noConflict() 运行这个函数将变量 $ 的控制权让渡给第一个实现它的那个库.