C++中rapidxml用法及例子
2013-11-22 16:51
281 查看
rapidxml是一个快速的xml库,比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。
由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站: http://rapidxml.sourceforge.net/,这个库源码一共只有四个文件分别是:
![](http://s11.sinaimg.cn/middle/a459dcf5tc74f00a92daa&690)
关于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;
}
由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 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;
}
相关文章推荐
- C++中rapidxml用法及例子(源码)
- C++中rapidxml用法及例子
- C++ vector详细用法(补充例子 持续更新)
- 一个例子演示了C++异常的推荐用法
- c++ string的用法和例子(官方手册)
- c++中的new操作符定位用法(placement new) 的一个例子
- 详解C++中string的用法和例子
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法----细节决定成败 (sort用法)
- C++中的map用法大全
- c++ map/multimap,set/multiset的用法及比较
- C++中const的用法详细总结
- wget下载终极用法和15个详细的例子
- 【C/C++】联合union的用法和说明
- c++中throw的用法
- 标准C++中的string类的用法总结
- C++STL 常用 函数 用法
- C++学习------包含多态的例子
- 关于ExpandableListView用法的一个简单小例子(转)
- c++中static的全部用法
- C++中MessageBox()的详细用法(转载)