首页 > 代码库 > C++使用TinyXML

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: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 CUDXml103 {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文件

  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     else113         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     else121         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     else129         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