博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用rapidxml操作xml~读写文件操作
阅读量:4156 次
发布时间:2019-05-25

本文共 3203 字,大约阅读时间需要 10 分钟。

rapidxml~网上很容易下,下面介绍使用方法:
1、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文件为:
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客<?xml version='1.0' encoding='utf-8' ?>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
<config>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<color>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<red>0.1</red>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<green>0.1</green>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<blue>0.1</blue>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<alpha>1.0</alpha>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
</color>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<size>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<x>640</x>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<y>480</y>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
</size>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<mode fullscreen="false">screen mode</mode>
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
</config>
2、读xml文件
基本的步骤为
首先获取xml文件数据
然后分析数据
获取节点
获取属性
获取名字
获取值
...

代码如下:
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
#include 
<
iostream
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客#include 
<
rapidxml
/
rapidxml.hpp
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客#include 
<
rapidxml
/
rapidxml_utils.hpp
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客#include 
<
rapidxml
/
rapidxml_print.hpp
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
using
 
namespace
 rapidxml;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
int
 main()
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
{    
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      file
<> fdoc("config.xml");
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<fdoc.data()<<std::endl; 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      xml_document
<>   doc;    
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      doc.parse
<0>(fdoc.data()); 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<doc.name()<<std::endl;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
//! 获取根节点
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
      xml_node<>* root = doc.first_node();
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<root->name()<<std::endl;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
//! 获取根节点第一个节点
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
      xml_node<>* node1 = root->first_node();
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<node1->name()<<std::endl; 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      xml_node
<>* node11 = node1->first_node();
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<node11->name()<<std::endl;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<node11->value()<<std::endl;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
//! 修改之后再次保存
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
      xml_node<>* size = root->first_node("size");
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      size
->append_node(doc.allocate_node(node_element,"w","0"));
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      size
->append_node(doc.allocate_node(node_element,"h","0"));
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::
string text;  
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      rapidxml::print(std::back_inserter(text),doc,
0);  
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::cout
<<text<<std::endl; 
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      std::ofstream 
out("config.xml");
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
out << doc;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客      system(
"PAUSE");
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客     
return EXIT_SUCCESS;
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客}

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
生成的xml为:

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
<?
xml version='1.0' encoding='utf-8' 
?>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
<
config
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<
color
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
red
>
0.1
</
red
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
green
>
0.1
</
green
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
blue
>
0.1
</
blue
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
alpha
>
1.0
</
alpha
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
</
color
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<
size
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
x
>
640
</
x
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客        
<
y
>
480
</
y
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
</
size
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客    
<
mode 
fullscreen
="false"
>
screen mode
</
mode
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
</
config
>

使用rapidxml操作xml~读写文件操作 - songhao0201 - songhao0201的博客
需要说明的是rapidxml明显有一个bug

那就是append_node(doc.allocate_node(node_element,"h","0"));的时候并不考虑该对象是否存在!
参考:

转载地址:http://hkwxi.baihongyu.com/

你可能感兴趣的文章
与docker容器交互
查看>>
配置带用户权限的docker registry v2
查看>>
Java NIO之Selector
查看>>
CentOS7下安装MySQL5.7安装与配置
查看>>
VM虚拟机中Linux扩展磁盘空间的方法
查看>>
linux修改磁盘挂载目录
查看>>
J2SE发送http请求并获取返回数据
查看>>
jfreechart饼图和柱状图ajax
查看>>
Centos新建永久网桥
查看>>
js滚动图片新闻
查看>>
js tab标签页
查看>>
js滚动新闻
查看>>
pig简介
查看>>
pig自定义函数
查看>>
ZKFailoverController( zkfc)介绍
查看>>
分布式服务框架 Zookeeper -- 管理分布式环境中的数据
查看>>
彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题
查看>>
mysql主从复制实现数据库同步
查看>>
CentOS7配置VNC
查看>>
kvm虚拟机磁盘扩容
查看>>