rapidxml:(内容源自网络)
一个项目对xml的操作是很常见的,在网上找了好久,经过大家一致认为,rapidxml在解析xml上占有绝对优势(bug需要在用的时候发觉)。
库可以配置宏:
RAPIDXML_NO_EXCEPTIONS //不使用异常
RAPIDXML_STATIC_POOL_SIZE //内存池大小默认(64 * 1024)
一般都不用改
rapidxml.hpp:
只要文件 实现内存池 解析string 异常处理
xml_base 基数节点类
xml_attribute 文本类
xml_node 节点类
xml_document 文档类
rapidxml_iterators.hpp:
提供两个迭代器类:node_iterator, attribute_iterator
rapidxml_print.hpp:
提供跟字符串,流对象的装换函数
rapidxml_utils.hpp:
提供一个file用来读取文件使用
跟两个计数函数 count_children,count_attributes
注意:需要说明的是rapidxml明显有一个bug,那就是append_node(doc.allocate_node(node_element,"h","0"));的时候并不考虑该对象是否存在!
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);
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 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>
读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<0>(fdoc.data());
std::cout<<doc.name()<<std::endl;
//! 获取根节点
xml_node<>* root = doc.first_node();
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;
}
结果:
<?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>
分享到:
相关推荐
rapidxml实现xml文件的更改,支持覆盖原文件,也支持生成新文件,编译环境为vs2015,内附使用说明
RapidXml读取并修改XML文件,封装成单独的类,可以直接使用,调用也非常方便
xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作
C++使用rapidxml生成XML文件与读取XML结构文件数据
动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件...
XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类
Jquery操作xml_Demo。 帮一个朋友做的一个Demo实例,用jquery读取xml文件,很简单的操作,一看就明白。
lua 外部库 lua 外部库,带有 Rapidxml 的 xmlparser
C#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、...
C# winfrom操作xml_读写修改xml及写入数据库,这是共用了60积分下载的,这里分享给大家一起研究研究,里面有四个操作xml文件数据库的DEMO方法。各位有好的方法欢迎一起沟通学习。
RapidXml 试图成为最快的 XML DOM 解析工具包,同时保证解析结果的可用...RapidXml 为采用C++语言操作XML提供了机遇,同时结合XMPP协议也开启了诸如Wt、CxServer等基于C++的网络应用在即时通讯领域的更宽广的发展空间。
mfc 操作 xml 小例子mfc 操作 xml 小例子mfc 操作 xml 小例子mfc 操作 xml 小例子
JSTL操作XML,通过具体的例子说明了如何通过JSTL操作XML的操作。
SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件
一个完美教程。。。Javascript操作XML和HTML,Javascript操作XML和HTML,Javascript操作XML和HTML
php操作xml实例代码php操作xml实例代码php操作xml实例代码php操作xml实例代码
用VB操作XML '生成一个XML DOMDocument对象 Set xmlDOMDocument = New MSXML2.DOMDocument '生成根节点,在此我们称它为“爷爷辈”节点 Set Root_Node = xmlDOMDocument.createElement("Root") Set ...
js 操作xml 文件 读取xml文件 js 操作xml 文件 读取xml文件
rapidxml 读写xml例子,而且还是MFC程序,环境vs2013,还使用到map和vector等,是个不错的学习例子
操作XML文件 源代码