使用rapidxml操作xml2(读文件操作)

 接上篇
本文主要涉及rapidxml读文件的操作

基本的步骤为
首先获取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为:
<? 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明显有一个bug
那就是append_node(doc.allocate_node(node_element,"h","0"));的时候并不考虑该对象是否存在!

你可能感兴趣的:(xml,encoding)