C++使用TinyXML

参照一:http://qaohao.iteye.com/blog/496237

参照二:http://hi.baidu.com/lnylvoeegzcgnrr/item/af68fd9cde40fc1a924f41f5

别人封装的TinyXML:

.h文件

  1 #include "xml\tinyxml.h"
  2 #include <string>
  3 using namespace std;
  4
  5 #if !defined(AFX_STDAFX_H__UDXML_EF91_4EF1_A2F2_53AD89B23C30__INCLUDED_)
  6 #define AFX_STDAFX_H__UDXML_EF91_4EF1_A2F2_53AD89B23C30__INCLUDED_
  7
  8 #if _MSC_VER > 1000
  9 #pragma once
 10 #endif
 11
 12 /******************************************************************************
 13   描述: 对tinyxml库封装的简单类:
 14         1,创建、保存xml
 15         2,动态创建节点,更改名称以及值;动态删除
 16         3,动态增加、删除属性,遍历、读取属性名称以及值
 17
 18   背景: tinyxml对xml操作的接口过于分散,为了适应自己的需要,对常用的接口进行简单的封
 19         装,各个接口增加注释,方便使用。
 20
 21   环境: WinXP+VC6
 22   修改: 仇军利        EMAIL:[email protected]        QQ:282881515
 23   版本: 2012-12-28    V1.0
 24   发布: CSDN
 25 ******************************************************************************/
 26 class CUDXmlAttribute
 27 {
 28 public:
 29     CUDXmlAttribute()                           { m_pAttribute=NULL      ; }
 30     CUDXmlAttribute( TiXmlAttribute *pAttribute){ m_pAttribute=pAttribute; }
 31
 32     //              下一个属性
 33     CUDXmlAttribute Next();
 34     //              前一个属性
 35     CUDXmlAttribute Pre();
 36
 37     //              返回属性名称
 38     string          Name();
 39     //              设置属性名称
 40     void            SetName(const char* name);
 41
 42     //              返回属性值string类型
 43     string          Value();
 44     //              返回属性值int类型
 45     int             IntValue();
 46     //              返回属性值double类型
 47     double          DoubleValue();
 48     //              设置属性值
 49     void            SetValue(const char* value);
 50
 51 private:
 52     TiXmlAttribute *m_pAttribute;
 53 };
 54
 55 class CUDXmlNodePtr
 56 {
 57 public:
 58     CUDXmlNodePtr()                         { m_pElement=NULL; }
 59     CUDXmlNodePtr(TiXmlElement *pElement)   { m_pElement=pElement; }
 60     CUDXmlNodePtr(TiXmlNode* pNode)         { m_pElement=pNode->ToElement(); }
 61     BOOL          operator==(CUDXmlNodePtr&node);
 62
 63     //              添加新的节点
 64     CUDXmlNodePtr   NewChild(const char* name);
 65     //              获取第一个孩子节点,默认返回第一个孩子节点
 66     CUDXmlNodePtr   GetFirstChild(const char* name=NULL);
 67     //              获取下一个兄弟节点,默认返回下边第一个兄弟节点
 68     CUDXmlNodePtr   NextSibling(const char* name=NULL);
 69     //              获取上一个兄弟节点,默认返回上边第一个兄弟节点
 70     CUDXmlNodePtr   PreSibling(const char* name=NULL);
 71     //              自我销毁
 72     BOOL            Destory();
 73     //              销毁所有孩子节点
 74     void            DestoryAllChildren();
 75
 76     //              设置属性
 77     void            SetAttribute(const char* name, const char* value);
 78     //              读取属性值
 79     string          GetAttribute(const char* name);
 80     CUDXmlAttribute GetFirstAttribute();
 81     CUDXmlAttribute LastAttribute();
 82
 83     //              设置节点名称
 84     void            SetName(const char*name);
 85     //              获取节点名称
 86     string          GetName();
 87
 88     //              设置节点值
 89     void            SetValue(const char* value);
 90     //              获取节点值
 91     string          GetValue();
 92
 93     //              判断该节点是否为空
 94     BOOL            IsNull();
 95     //              返回根节点
 96     CUDXmlNodePtr   Root();
 97
 98 public:
 99     TiXmlElement *m_pElement;
100 };
101
102 class CUDXml
103 {
104 public:
105     //    创建xml文件 默认声明为<?xml version="1.0" encoding="UTF-8" standalone="no"?>
106     BOOL  CreateXml(const char* path, const char* version="1.0", const char*  encoding="UTF-8", const char*  standalone="no");
107
108     //    打开文件
109     BOOL  Open(const char* path);
110
111     //    保存文件
112     BOOL  Save(const char* path=NULL);
113
114     //    获取根节点
115     CUDXmlNodePtr  GetRoot();
116
117     //    判断该文件是否存在
118     BOOL  IsExist(const char* path);
119
120 private:
121
122     TiXmlDocument m_doc;
123 };
124 #endif 

.cpp文件

  1 #include <windows.h>
  2 #include <stdio.h>
  3 #include <tchar.h>
  4 #include "UDXml.h"
  5 #include <io.h>
  6
  7
  8
  9
 10 BOOL CUDXml::CreateXml(const char*  path,  const char* _version /*="1.0" */, const char* _encoding /*="UTF-8" */, const char* _standalone/*="no" */ )
 11 {
 12     m_doc.LoadFile(path, TIXML_ENCODING_UTF8);
 13
 14     TiXmlNode *pDelar = new TiXmlDeclaration(_version, _encoding, _standalone);
 15     m_doc.InsertEndChild(*pDelar);delete pDelar;
 16
 17     TiXmlNode *pRoot  = new TiXmlElement("root");
 18     m_doc.InsertEndChild(*pRoot);
 19
 20     return TRUE;
 21 }
 22
 23
 24 BOOL CUDXml::Open( const char* path )
 25 {
 26     return m_doc.LoadFile(path, TIXML_ENCODING_UTF8);
 27 }
 28
 29 BOOL CUDXml::Save(const char* path)
 30 {
 31     BOOL ret;
 32
 33     if(NULL == path) ret = m_doc.SaveFile();
 34     else ret = m_doc.SaveFile(path);
 35
 36     return ret;
 37 }
 38
 39 CUDXmlNodePtr  CUDXml::GetRoot()
 40 {
 41     return m_doc.RootElement();
 42 }
 43
 44 BOOL CUDXml::IsExist( const char* path )
 45 {
 46     if(-1 != _access(path, 0))
 47         return TRUE;
 48     else
 49         return FALSE;
 50 }
 51
 52 CUDXmlNodePtr CUDXmlNodePtr::NewChild( const char* name )
 53 {
 54     CUDXmlNodePtr NewNode;
 55     TiXmlNode *pNode = new TiXmlElement(name);
 56
 57     NewNode = m_pElement->InsertEndChild(*pNode);
 58
 59     delete pNode;
 60     return NewNode;
 61 }
 62
 63 BOOL CUDXmlNodePtr::IsNull()
 64 {
 65     return NULL==m_pElement;
 66 }
 67
 68 void CUDXmlNodePtr::SetAttribute( const char* name, const char* value )
 69 {
 70     m_pElement->SetAttribute(name, value);
 71 }
 72
 73 std::string CUDXmlNodePtr::GetAttribute( const char* name )
 74 {
 75     return     m_pElement->Attribute(name);
 76 }
 77
 78 void CUDXmlNodePtr::SetName( const char*name )
 79 {
 80     m_pElement->SetValue(name);
 81 }
 82
 83 std::string CUDXmlNodePtr::GetName()
 84 {
 85     const char *pName = m_pElement->Value();
 86     if(NULL == pName)
 87         return "";
 88
 89     return pName;
 90 }
 91
 92 void CUDXmlNodePtr::SetValue( const char* value )
 93 {
 94     TiXmlNode *pText = new TiXmlText(value);
 95     m_pElement->InsertEndChild(*pText);
 96     delete pText;
 97 }
 98
 99 std::string CUDXmlNodePtr::GetValue()
100 {
101     const char* pText = m_pElement->GetText();
102     if(NULL == pText)
103         return "";
104
105     return pText;
106 }
107
108 CUDXmlNodePtr CUDXmlNodePtr::GetFirstChild( const char* name/*=NULL*/ )
109 {
110     if(NULL == name)
111         return m_pElement->FirstChildElement();
112     else
113         return m_pElement->FirstChildElement(name);
114 }
115
116 CUDXmlNodePtr CUDXmlNodePtr::NextSibling( const char* name/*=NULL*/ )
117 {
118     if(NULL == name)
119         return m_pElement->NextSiblingElement();
120     else
121         return m_pElement->NextSiblingElement(name);
122 }
123
124 CUDXmlNodePtr CUDXmlNodePtr::PreSibling( const char* name/*=NULL*/ )
125 {
126     if(NULL == name)
127         return m_pElement->PreviousSibling();
128     else
129         return m_pElement->PreviousSibling(name);
130 }
131
132 BOOL CUDXmlNodePtr::Destory()
133 {
134     if(*this == Root())return FALSE;
135
136     return    m_pElement->Parent()->RemoveChild((TiXmlNode*)m_pElement);
137 }
138
139 CUDXmlNodePtr CUDXmlNodePtr::Root()
140 {
141     TiXmlElement *pElement = m_pElement;
142     TiXmlElement *pRoot = NULL;
143
144     int nType = pElement->Type();
145     while (0 != nType)
146     {
147         pRoot    = pElement;
148         pElement = (TiXmlElement*)pElement->Parent();
149         nType    = pElement->Type();
150     }
151
152     return pRoot;
153 }
154
155 BOOL CUDXmlNodePtr::operator==( CUDXmlNodePtr&node )
156 {
157     return this->m_pElement == node.m_pElement;
158 }
159
160 void CUDXmlNodePtr::DestoryAllChildren()
161 {
162     m_pElement->Clear();
163 }
164
165 CUDXmlAttribute CUDXmlNodePtr::GetFirstAttribute()
166 {
167     return m_pElement->FirstAttribute();
168 }
169
170 CUDXmlAttribute CUDXmlNodePtr::LastAttribute()
171 {
172     return m_pElement->LastAttribute();
173 }
174
175 CUDXmlAttribute CUDXmlAttribute::Next()
176 {
177     return    m_pAttribute->Next();
178 }
179
180 CUDXmlAttribute CUDXmlAttribute::Pre()
181 {
182     return m_pAttribute->Previous();
183 }
184
185 std::string CUDXmlAttribute::Name()
186 {
187     return m_pAttribute->Name();
188 }
189
190 std::string CUDXmlAttribute::Value()
191 {
192     return m_pAttribute->Value();
193 }
194
195 void CUDXmlAttribute::SetName( const char* name )
196 {
197     m_pAttribute->SetName(name);
198 }
199
200 void CUDXmlAttribute::SetValue( const char* value )
201 {
202     m_pAttribute->SetValue(value);
203 }
204
205 double CUDXmlAttribute::DoubleValue()
206 {
207     return m_pAttribute->DoubleValue();
208 }
209
210 int CUDXmlAttribute::IntValue()
211 {
212     return m_pAttribute->IntValue();
213 }

时间: 2024-11-05 17:30:24

C++使用TinyXML的相关文章

使用TinyXML进行XML操作

本例基于TinyXML实现XML的自动解析和创建,由于本人是菜鸟刚入门,例子中添加了enum.struct.vector.map.list的常见用法,首先添加6个tinyxml工程文件,然后设置调试参数. XML文档如下: 代码如下: AutoAnalysisCreateTinyXML.h AutoAnalysisCreateTinyXML.cpp AutoMain.cpp

tinyxml安装和使用

下载: 官方文档:http://www.grinninglizard.com/tinyxmldocs/index.html 中文翻译:http://www.cnblogs.com/kex1n/archive/2010/10/03/1841502.html TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分

C++通过TinyXML类库读写XML文件

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系. 使用之前,需要先下载TinyXML类库:http://download.csdn.net/detail/tennysonsky.也可在sourceforge上下载

TinyXml快速入门(二)

在<TinyXml快速入门(一)>中我介绍了使用TinyXml库如何创建和打印xml文件,下面我介绍使用tinyxml库对xml文件进行一系列的操作,包括获取xml文件声明,查询指定节点.删除指定节点.修改指定节点和增加节点的用法.在<TinyXml快速入门(一)>中我们知道xml文件中的一个节点元素实际包含两种值:属性和文本.其中属性在我看来可以看作是STL中的map,一个属性带一个属性值,map中也是一个键带一个键值.因此查询指定节点.删除指定节点和增加节点必然是需要实现两种方

开源TinyXML 最简单的入门教程

TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件. 该项目属于开源项目,在sourceforge上边的链接是:http://sourceforge.net/projects/tinyxml/ 当前最新版本是2.6.2 先看一下源码文档的结构: Docs是帮助文档,里边有非常多的使用说明,仅仅截一张图看一下: 具体根据需要再看 我们使用的是它的库,可以是静态的也可以是动态库,我就用静态库了,将这里边的几个头文件和源文件一起创建一个工

Tinyxml的简单应用

参考文章: 1-> http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html 2-> http://blog.csdn.net/clever101/article/details/5334369 在日常开发过程中,常常需要用到xml文件的读写,tinyxml是一款轻量级的xml开源库,对于诸如程序配置,账单记录等常见的xml文件读写,tinyxml完全可以胜任. 1->代码下载:http://sourceforge.n

TinyXml 快速入门(三)

在<TinyXml 快速入门(二)>介绍使用tinyxml库获取xml文件声明,查询指定节点.删除指定节点的做法.在本文中继续介绍修改指定节点和增加节点的做法. 修改节点其实和查询指定节点的值有点类似,也分为两个函数,一个实现修改文本.另一个负责修改属性. /*!*  \brief 修改指定节点的文本.**  \param XmlFile xml文件全路径.*  \param strNodeName 指定的节点名.*  \param strText 重新设定的文本的值*  \return 是否

TinyXml快速入门(一)

对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐.因此对于简单的xml文件的解析,我更愿意使用开源的TinyXml. 首先介绍一下TinyXml吧.TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,其主页是:http://www.grinningli

C++ TinyXml操作(含源码下载)

前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系. TinyXML介绍 在TinyXML中,根据XML的各种元素来定义了一些类:TiXmlBase

Tinyxml 操作XML

对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐.因此对于简单的xml文件的解析,我更愿意使用开源的TinyXml. 首先介绍一下TinyXml吧.TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,其主页是:http://www.grinningli