`

rapidxml操作xml

    博客分类:
  • C++
阅读更多

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文件的更改

    rapidxml实现xml文件的更改,支持覆盖原文件,也支持生成新文件,编译环境为vs2015,内附使用说明

    RapidXml读取并修改XML文件

    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操作xml操作xml操作xml操作xml操作xml操作

    c++生成与读取XML by rapidxml

    C++使用rapidxml生成XML文件与读取XML结构文件数据

    动态生成Rss文件 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操作类XML操作类XML操作类XML操作类

    Jquery操作xml_Demo

    Jquery操作xml_Demo。 帮一个朋友做的一个Demo实例,用jquery读取xml文件,很简单的操作,一看就明白。

    lua-extern-library:lua 外部库,带有 Rapidxml 的 xmlparser

    lua 外部库 lua 外部库,带有 Rapidxml 的 xmlparser

    C#中操作xml文件(插入节点、修改、删除).htm

    C#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、...

    C# winfrom操作xml_读写修改xml及写入数据库

    C# winfrom操作xml_读写修改xml及写入数据库,这是共用了60积分下载的,这里分享给大家一起研究研究,里面有四个操作xml文件数据库的DEMO方法。各位有好的方法欢迎一起沟通学习。

    rapidxml-1.13

    RapidXml 试图成为最快的 XML DOM 解析工具包,同时保证解析结果的可用...RapidXml 为采用C++语言操作XML提供了机遇,同时结合XMPP协议也开启了诸如Wt、CxServer等基于C++的网络应用在即时通讯领域的更宽广的发展空间。

    mfc 操作 xml 小例子

    mfc 操作 xml 小例子mfc 操作 xml 小例子mfc 操作 xml 小例子mfc 操作 xml 小例子

    JSTL操作XML JSTL操作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文件SAX.java 操作xml文件

    Javascript操作XML和HTML

    一个完美教程。。。Javascript操作XML和HTML,Javascript操作XML和HTML,Javascript操作XML和HTML

    php操作xml实例代码

    php操作xml实例代码php操作xml实例代码php操作xml实例代码php操作xml实例代码

    用VB 6操作XML文件

    用VB操作XML '生成一个XML DOMDocument对象 Set xmlDOMDocument = New MSXML2.DOMDocument '生成根节点,在此我们称它为“爷爷辈”节点 Set Root_Node = xmlDOMDocument.createElement("Root") Set ...

    js 操作xml 文件 读取xml文件

    js 操作xml 文件 读取xml文件 js 操作xml 文件 读取xml文件

    rapidxml读写例子

    rapidxml 读写xml例子,而且还是MFC程序,环境vs2013,还使用到map和vector等,是个不错的学习例子

    操作XML文件 源代码

    操作XML文件 源代码

Global site tag (gtag.js) - Google Analytics