C++中rapidxml用法及例子

转自 C++中rapidxml用法及例子:https://blog.csdn.net/zxxSsdsd/article/details/16887561?utm_source=blogxgwz8

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

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

C++中rapidxml用法及例子(源码)
关于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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值