码迷,mamicode.com
首页 > 编程语言 > 详细

C++使用TinyXML

时间:2014-11-10 19:29:58      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   color   ar   os   使用   

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

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

bubuko.com,布布扣

别人封装的TinyXML:

.h文件

bubuko.com,布布扣
  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:282881515@163.COM        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 
View Code

.cpp文件

bubuko.com,布布扣
  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 }
View Code

 

C++使用TinyXML

标签:des   style   blog   http   io   color   ar   os   使用   

原文地址:http://www.cnblogs.com/chechen/p/4087716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!