zoukankan      html  css  js  c++  java
  • C++中rapidxml用法及例子(源码)

    rapidxml是一个快速的xml库,比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。
         由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站:https://sourceforge.net/projects/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;
    }
  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/7586713.html
Copyright © 2011-2022 走看看