使用rapidxml操作xml~读写文件操作(转)
来源:互联网 发布:mac双系统怎么切换 编辑:程序博客网 时间:2024/06/05 10:40
rapidxml~网上很容易下,下面介绍使用方法:
1、xml写文件如下:
#include <iostream>#include <rapidxml/rapidxml.hpp>#include <rapidxml/rapidxml_utils.hpp>#include <rapidxml/rapidxml_print.hpp>using namespace rapidxml;int main(){ xml_document<> doc; xml_node<>* rot = doc.allocate_node(rapidxml::node_pi,doc.allocate_string("xml version='1.0' encoding='utf-8'"));doc.append_node(rot);xml_node<>* node = doc.allocate_node(node_element,"config","information"); xml_node<>* color = doc.allocate_node(node_element,"color",NULL); //建议使用如下方法,否则临时变量的指针出了作用域,容易造成xml节点问题//std::string s = "color";//char* pname = doc.allocate_string(s.c_str());//doc.allocate_node(node_element,pname,NULL)doc.append_node(node);node->append_node(color);color->append_node(doc.allocate_node(node_element,"red","0.1"));color->append_node(doc.allocate_node(node_element,"green","0.1"));color->append_node(doc.allocate_node(node_element,"blue","0.1"));color->append_node(doc.allocate_node(node_element,"alpha","1.0"));xml_node<>* size = doc.allocate_node(node_element,"size",NULL); size->append_node(doc.allocate_node(node_element,"x","640"));size->append_node(doc.allocate_node(node_element,"y","480"));node->append_node(size);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.xml");out << doc;system("PAUSE");return EXIT_SUCCESS;}
生成的xml文件为:
<?xml version='1.0' encoding='utf-8' ?><config> <color> <red>0.1</red> <green>0.1</green> <blue>0.1</blue> <alpha>1.0</alpha> </color> <size> <x>640</x> <y>480</y> </size> <mode fullscreen="false">screen mode</mode></config>
2、读xml文件
#include <iostream>#include <rapidxml/rapidxml.hpp>#include <rapidxml/rapidxml_utils.hpp>#include <rapidxml/rapidxml_print.hpp>using namespace rapidxml;int main(){ file<> fdoc("config.xml");std::cout<<fdoc.data()<<std::endl; xml_document<> doc; doc.parse<parse_full>(fdoc.data()); std::cout<<doc.name()<<std::endl;//! 获取根节点xml_node<>* root = doc.first_node("config");std::cout<<root->name()<<std::endl;//! 获取根节点第一个节点xml_node<>* node1 = root->first_node();std::cout<<node1->name()<<std::endl; xml_node<>* node11 = node1->first_node();std::cout<<node11->name()<<std::endl;std::cout<<node11->value()<<std::endl;//! 修改之后再次保存xml_node<>* size = root->first_node("size");size->append_node(doc.allocate_node(node_element,"w","0"));size->append_node(doc.allocate_node(node_element,"h","0"));std::string text; rapidxml::print(std::back_inserter(text),doc,0); std::cout<<text<<std::endl; std::ofstream out("config.xml");out << doc;system("PAUSE");return EXIT_SUCCESS;}
需要说明的是rapidxml明显有一个bug
那就是append_node(doc.allocate_node(node_element,"h","0"));的时候并不考虑该对象是否存在!
ps:对于常量节点名称,值或属性,直接doc.allocate_node(node_element,"color",NULL);没关系,但是有时程序是变量节点,这里要先申请内存:
char* pname = doc.allocate_string(s.c_str());
doc.allocate_node(node_element,pname,NULL)
参考:http://blog.csdn.net/zhaoze87/article/details/7205061
http://www.cppblog.com/tx7do/archive/2010/08/18/123779.html
- 使用rapidxml操作xml~读写文件操作
- 使用rapidxml操作xml~读写文件操作
- 使用rapidxml操作xml~读写文件操作(转)
- 使用RapidXML读写XML文件
- 使用rapidxml读写xml文件
- 使用rapidxml操作xml文件(1)-写文件操作
- 使用RAPIDXML操作XML文件(1)-写文件操作
- rapidxml读取xml文件操作
- 使用rapidxml操作xml2(读文件操作)
- 使用RAPIDXML操作XML2(读文件操作)
- rapidxml操作XML
- xml文件操作( 读写)
- XML文件读写操作
- XML文件读写操作
- 读写文件操作xml
- 使用rapidxml 生成xml文件
- C++操作XML之二---RapidXml
- JDom操作XML文件读写
- 基于Extjs开发不允许为空的文本框提示及相应的验证错误提示
- [C/C++] RGBA数组生成Windows下的ico文件
- 2.3.1 Launcher编译与修改
- Unity实例化Prefab in C#
- 作为测试人员,从哪几个方面保证产品质量呢
- 使用rapidxml操作xml~读写文件操作(转)
- Linux帐号管理[下]--用户组管理
- g++对c++0x/c++11的标准支持度
- 突然决定
- VB.NET接口范例ISpeak
- sturt2解决 Error setting expression 'XXX' with value '[Ljava.lang.String;@1dad8
- 远程调用原理与对比(RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB)
- 设计模式六大原则(2):里氏替换原则 .
- Hdu 2602 - Bone Collector