首页 > 代码库 > 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
.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 }
C++使用TinyXML
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。