Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
接上篇
本文主要涉及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"));的时候并不考虑该对象是否存在!

经过这2篇 基本上就可以使用xml了
当然这里并没有涉及异常处理
posted on 2010-04-16 21:49 ccsdu2009 阅读(2206) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理