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.net/projects/tinyxml/

2->编译

  解压下载包,用VS2010打开 tinyxml.sln 解决方案,里面共有四个工程,编译第一个工程 tinyxml ,生成 tinyxml.lib 静态库文件,我们所需要用到的就是 tinyxml.h 和 tinyxml.lib .

3->测试

  新建工程,添加tinyxml.h头文件和tinyxml.lib静态库,我们就可以对xml文件进行都写了,以下是测试代码.

 

#include <iostream>
#include <string>
#include "tinystr.h"
#include "tinyxml.h"
using namespace std;

#define ASSERT_P(v,s,r) do{if(v==s)return r;} while(0);

bool CreateFile(const char* szFileName)
{
    // 创建文档对象
    TiXmlDocument *pDocument = new TiXmlDocument();
    ASSERT_P(pDocument,NULL,false);
    // 创建根元素,连接到pDocument
    TiXmlElement *pConfigElement = new TiXmlElement("config");
    ASSERT_P(pConfigElement,NULL,false);
    pDocument->LinkEndChild(pConfigElement);
    // 创建一个common元素,连接到config下
    TiXmlElement *pCommonElement = new TiXmlElement("common");
    ASSERT_P(pCommonElement,NULL,false);
    // 为common元素设置属性(key,value)
    pCommonElement->SetAttribute("zoneid","1001");
    pCommonElement->SetAttribute("platid","1");
    pConfigElement->LinkEndChild(pCommonElement);
    // 添加zone元素
    int nZoneCnt = 10;
    TiXmlElement *pZoneListElement = new TiXmlElement("zonelist");
    ASSERT_P(pZoneListElement,NULL,false);
    pZoneListElement->SetAttribute("zonecount",10);
    pConfigElement->LinkEndChild(pZoneListElement);
    for(int i=0;i<10;i++)
    {
        char szName[50];
        TiXmlElement *pZoneElement = new TiXmlElement("zone");
        sprintf(szName,"zone_%02d",i+1);
        pZoneElement->SetAttribute("name",szName);
        pZoneListElement->LinkEndChild(pZoneElement);
    }
    return pDocument->SaveFile(szFileName);
}

bool ReadFile(const char *szFileName)
{
    // 加载文件
    TiXmlDocument *pDocument = new TiXmlDocument(szFileName);
    ASSERT_P(pDocument,NULL,false);
    pDocument->LoadFile();
    // 获得,并输出根元素
    TiXmlElement *pConfigElement = pDocument->RootElement();
    cout<<pConfigElement->Value()<<endl;
    // 获取config的第一个子元素
    TiXmlElement *pCommonElement = pConfigElement->FirstChildElement();
    // or TiXmlElement *pCommonElement = pConfigElement->FirstChildElement("common");
    ASSERT_P(pCommonElement,NULL,false);
    cout<<"\tzoneid="<<pCommonElement->Attribute("zoneid")<<",platid="<<pCommonElement->Attribute("platid")<<endl;
    // 第二个子元素
    TiXmlElement *pZoneListElement = pConfigElement->FirstChildElement("zonelist");
    ASSERT_P(pZoneListElement,NULL,false);
    int nZoneCount = atoi(pZoneListElement->Attribute("zonecount"));
    TiXmlElement *pZoneElement = pZoneListElement->FirstChildElement();
    for(int i=0;i<nZoneCount;i++)
    {
        ASSERT_P(pZoneElement,NULL,false);
        cout<<"\t\tname="<<pZoneElement->Attribute("name")<<endl;
        pZoneElement = pZoneElement->NextSiblingElement();
    }
    return true;
}

int main()
{
    const char *szFileName = "./config.xml";
    CreateFile(szFileName);
    ReadFile(szFileName);
    system("pause");
    return 0;
}
时间: 2024-10-14 05:10:19

Tinyxml的简单应用的相关文章

开源TinyXML 最简单的入门教程

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

TinyXML的简单用法

TinyXML最新的发布版本是2.5.3,一直想用,今天拿出点时间用了用,现在把所掌握的初步简单用法整理一下. 首先编译库文件,TinyXML有两个编译版本,取决于是否使用STL.Build之后在新程序代码中include库中的tinyxml.h即可.下面是我的代码: #include <cstdio> #include <iostream> #include "../tinyxml.h" int main() { TiXmlDocument myDoc( &q

TinyXML 的简单介绍以及使用

先说几句重点: 1,tinyxml 生成或解析XML非常好用 2,tinyxml 利用DOM(文档对象模型)操作XML,根节点与各个子节点相当于形成一棵树 3,只要你了解tinyxml的用法,可以只new对象而不用delete. 4,tinyxml包含6个文件  tinystr.cpp , tinystr.h , tinyxml.cpp , tinyxmlerror.cpp , tinyxml.h , tinyxmlparser.cpp 5,来个官网说明的class  inheritance,官

C/C++框架和库 (真的很强大) 转

http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali

值得推荐的C/C++框架和库(深度好文)

[本文系外部转贴,原文地址:http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.html http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 公交车上看到的好文,忍不住转发!下次造轮子前先看看现有的轮子吧-- 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客

C++开源库大全(转)

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会 框架 C++通用框架和库

值得推荐的C/C++框架和库

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht

值得推荐的C/C++框架和库 very good

[本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看看现有的轮子吧 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来

转 值得推荐的C/C++框架和库

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht