C++中rapidxml用法及例子

  rapidxml是一个快速的xml库,比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。

  由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站: http://rapidxml.sourceforge.net/,这个库源码一共只有四个文件分别是:

  

  关于raidxml资料相关的介绍网上有很多资料,在这里我就不重复介绍了,下面直接贴代码:

  

#include "stdafx.h"
#include "stdlib.h"
#include <iostream>

//下面三个文件是本段代码需要的库文件
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_utils.hpp"
#include "rapidxml/rapidxml_print.hpp"

int CreateXml();
int ReadAndChangeXml();
int _tmain(int argc, _TCHAR* argv[])
{
    //测试用例
    CreateXml();
    //测试用例
    ReadAndChangeXml();
    system("pause");
    return 0;
}
//创建一个名称为config2.xml文件
int CreateXml()
{
    rapidxml::xml_document<> doc;
    rapidxml::xml_node<>* rot = doc.allocate_node(rapidxml::node_pi,doc.allocate_string("xml version=‘1.0‘ encoding=‘utf-8‘"));
    doc.append_node(rot);
    rapidxml::xml_node<>* node = doc.allocate_node(rapidxml::node_element,"config","information");
    doc.append_node(node);
    rapidxml::xml_node<>* color = doc.allocate_node(rapidxml::node_element,"color",NULL);
    node->append_node(color);
    color->append_node(doc.allocate_node(rapidxml::node_element,"red","0.1"));
    color->append_node(doc.allocate_node(rapidxml::node_element,"green","0.1"));
    color->append_node(doc.allocate_node(rapidxml::node_element,"blue","0.1"));
    color->append_node(doc.allocate_node(rapidxml::node_element,"alpha","1.0"));
    rapidxml::xml_node<>* size = doc.allocate_node(rapidxml::node_element,"size",NULL);
    size->append_node(doc.allocate_node(rapidxml::node_element,"x","640"));
    size->append_node(doc.allocate_node(rapidxml::node_element,"y","480"));
    node->append_node(size);
    rapidxml::xml_node<>* mode = doc.allocate_node(rapidxml::node_element,"mode","screen mode");
    mode->append_attribute(doc.allocate_attribute("fullscreen","false"));
    node->append_node(mode);
    std::string text;
    rapidxml::print(std::back_inserter(text), doc, 0);
    std::cout<<text<<std::endl;
    std::ofstream out("../config/config1.xml");
    out << doc;

    return 0;
}

//读取并修改config3.xml
int ReadAndChangeXml()
{
     rapidxml::file<> fdoc("../config/config2.xml");
     std::cout<<fdoc.data()<<std::endl;
     rapidxml::xml_document<> doc;
     doc.parse<0>(fdoc.data());
     std::cout<<doc.name()<<std::endl;
     //! 获取根节点
     rapidxml::xml_node<>* root = doc.first_node();
    std::cout<<root->name()<<std::endl;
    //! 获取根节点第一个节点
    rapidxml::xml_node<>* node1 = root->first_node();
    std::cout<<node1->name()<<std::endl;
    rapidxml::xml_node<>* node11 = node1->first_node();
    std::cout<<node11->name()<<std::endl;
    std::cout<<node11->value()<<std::endl;
    //! 修改之后再次保存
    rapidxml::xml_node<>* size = root->first_node("size");
    size->append_node(doc.allocate_node(rapidxml::node_element,"w","1"));
    size->append_node(doc.allocate_node(rapidxml::node_element,"h","1"));
    std::string text;
    rapidxml::print(std::back_inserter(text),doc,0);
   std::cout<<text<<std::endl;
   std::ofstream out("../config/config2.xml");
   out << doc;

   return 0;
}
时间: 2024-11-11 21:37:32

C++中rapidxml用法及例子的相关文章

C++中rapidxml用法及例子(源码)

rapidxml是一个快速的xml库,比tinyxml快了50-100倍.本文给出创建.读取.写入xml的源码. 由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站:https://sourceforge.net/projects/rapidxml/,这个库源码一共只有四个文件分别是: 关于raidxml资料相关的介绍网上有很多资料,在这里我就不重复介绍了,下面直接贴代码: #include "stdafx.h" #includ

jquery中cookie用法实例详解(获取,存储,删除等)

这篇文章主要介绍了jquery中cookie用法,结合实例详细分析了jQuery操作cookie的获取,存储,删除等操作,并附带了Jquery操作Cookie记录用户查询过信息实现方法,需要的朋友可以参考下 本文实例讲述了jquery中cookie用法.分享给大家供大家参考,具体如下: cookie在jquery中有指定的cookie操作类,下面我先来介绍我们在使用cookie操作类时的一些问题,然后介绍正确的使用方法. 使用JQuery操作cookie时 发生取的值不正确的问题: 结果发现co

div+css中clear用法

原文:div+css中clear用法 一开始用clear属性,只是跟float相对使用,今天看视频的时候还是不大明白,查了下资料原来是这样的哦,看咯. clear属性值有四个clear:both|left|right|none; 作用:该属性的值指出了不允许有浮动对象的边. 这个属性是用来控制float属性在文档流的物理位置的. 当属性设置float(浮动)时,他所在的物理位置已经脱离文档流了,但是大多时候我们希望文档流能识别float(浮动),或者是希望float(浮动)后面的元素不被floa

javascript中createTextRange用法(focus)

createtextrange createrange区别: 对象或元素不同,虽然都是返回TextRange.例如:     var r=document.body.createTextRange()    var r=document.createRange() document. createTextRange 可以对body.TEXTAREA.BUTTON创建TextRange,Range -- 范围 返回createTextRange的text和htmlText Js代码 <script

c#初学-多线程中lock用法的经典实例

本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待.这是通过在代码块运行期间为给定对象获取互斥锁来实现的. 在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问

linux中#和## 用法

在linux内核中能看到很多的##    一般来讲# 很容易理解 一般来讲有两个用途 1. 在一些连接脚本文件里作为注释 也就是说#后面的都是注释内容 2.c代码中做类似宏定义的字符串替换 举个例子: #define TEST(a) #a printf("%s\n",TEST(tim)) 运行结果就是 tim 这里就可以看出来这个#的功能就是将后面的变量变成一个字符串 但是##是什么意思呢? 这里就给出一个介绍 ## 的左右有两个 一, 做连接符 顾名思义就是连接两个符号 a1和 a#

js中prototype用法(转)

JavaScript能够实现的面向对象的特征有:·公有属性(public field)·公有方法(public Method)·私有属性(private field)·私有方法(private field)·方法重载(method overload)·构造函数(constructor)·事件(event)·单一继承(single inherit)·子类重写父类的属性或方法(override)·静态属性或方法(static member) 例子一(JavaScript中允许添加行为的类型):可以在

c++中const用法大全

 1. const 修饰普通变量 const修饰一个变量,意思就是这个变量是一个常量,不能被改变 const int x;              //x是一个整形常量 const double x;        //x 是一个double型常量 const 修饰的是一个指针时: const int *x;          //x 是一个指向常量整形的指针 int *const x:        //x 是一个常量指针. const int *const x ;          /

ORACLE 中ROWNUM用法总结!

ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1