使用boost读取XML文件详细介绍_C 语言

boost读取XML文件

boost中提供了对配置文件读取的支持,它就是:property_tree。

    basic_ptree 是property_tree的核心基础。其接口像std::list。可以执行很多基本的元素操作,比如使用begin()、end()等。
    此外还加入了操作属性树的get()、get_child()、get_value()、data()等额外的操作。

    basic_ptree有两个重要的内部定义self_type和value_type。self_type是basic_ptree模板实例化后自身的类型,它也是子节点的类型。value_type是节点的数据结构,它是一个std::pair,它含有属性名(first)和节点自身(second)。

    通常不使用basic_ptree,而是使用预定义的typedef。ptree、wptree、iptree、wiptree。前缀i表示忽略大小写,前缀w表示支持宽字符。

例如:

config.xml

<?xml version="1.0" encoding="utf-8"?>
<con>
 <id>1</id>
 <name>fansy</name>
 <urls>
  <url>http://blog.csdn.net//fansongy</url>
  <url>http://weibo.com//fansongy</url>
 </urls>
</con>

我要读取它的数据:


#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/typeof/typeof.hpp>
using namespace std;
using namespace boost::property_tree;
int main()
{
  ptree pt;
  read_xml("conf.xml",pt);   //读入一个xml文件
  cout<<"ID is "<<pt.get<int>("con.id")<<endl; //读取节点中的信息
  cout<<"Try Default"<<pt.get<int>("con.no_prop",100)<<endl; //如果取不到,则使用默认值
  ptree child = pt.get_child("con");  //取一个子节点
  cout<<"name is :"<<child.get<string>("name")<<endl;  //对子节点操作,其实跟上面的操作一样 

  child = pt.get_child("con.urls");
  for(BOOST_AUTO(pos,child.begin());pos != child.end();++pos) //boost中的auto
   {
     cout<<"\t"+pos->second.data()<<endl;
   }
  pt.put("con.name","Sword");  //更改某个键值
  pt.add("con.urls.url",http://www.baidu.com); //增加某个键值
  write_xml("conf.xml",pt);  //写入XML
  getchar();
  return 0;
} 

运行的显示为:
ID is 1
Try Default100
name is :fansy
    http://blog.csdn.net//fansongy
    http://weibo.com//fansongy 

config.xml为:
<?xml version="1.0" encoding="utf-8"?>
<con>
 <id>1</id>
 <name>Sword</name>
<urls>
   <url>http://blog.csdn.net//fansongy</url>
   <url>http://weibo.com//fansongy</url>
   <url>http://www.baidu.com</url>
</urls>
</con>  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索boost
读取xml文件
boost 读取xml、易语言读取xml、c语言读取xml文件、r语言读取xml文件、易语言远程读取xml,以便于您获取更多的相关知识。

时间: 2024-10-01 15:37:39

使用boost读取XML文件详细介绍_C 语言的相关文章

C++开发:为什么多线程读写shared_ptr要加锁的详细介绍_C 语言

我在<Linux 多线程服务端编程:使用 muduo C++ 网络库>第 1.9 节"再论 shared_ptr 的线程安全"中写道: (shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档(http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shared_ptr 的线程

python操作xml文件详细介绍_python

关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件. 一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <catalo

C语言 数据类型详细介绍_C 语言

C 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式. C 中的类型可分为以下几种: 序号 类型与描述 1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型. 2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量. 3 void 类型: 类型说明符 void 表明没有可用的值. 4 派生类型: 它们包括:指针类型.数组类型.结构类型.共用体类型和函数类型.

C++ Qt属性系统详细介绍_C 语言

C++ Qt属性系统详细介绍 Qt提供了一个绝妙的属性系统.跟那些由编译器提供的属性差不多.然而,作为一个独立于编译器和平台的库,Qt不依赖于非标准的编译特性,比如__property 或[property].Qt可以在任何平台上的标准编译器下编译.Qt属性系统基于元数据对象系统--就是那个提供了对象内置信号和槽通讯机制的家伙. 声明属性需要什么 要声明一个属性,需在继承自QObject的类中使用Q_PROPERTY()宏. Q_PROPERTY(type name READ getFuncti

c语言读取csv文件和c++读取csv文件示例分享_C 语言

C读取csv文件 复制代码 代码如下: #include <stdio.h>#include <string.h> char *trim(char *str){    char *p = str;     while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')        p ++;    str = p;     p = str + strlen(str) - 1;     while (*p == ' ' ||

C语言 栈的表示和实现详细介绍_C 语言

C语言 栈的表示和实现详细介绍 定义:栈是限定仅在表尾进行插入和删除操作的线性表. 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针. 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:

C语言 位段的详细介绍_C 语言

C语言中的位段       位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间.含有位段的结构体(联合体)称为位段结构.采用位段结构既能够节省空间,又方便于操作.      位段的定义格式为:      type  [var]: digits     其中type只能为int,unsigned int,signed int三种类型(int型能不能表示负数视编译器而定,比如VC中int就默认是signed int,能够表示负数).位段名称var是可选参数,即可以省

C++ boost 时间与日期处理详细介绍_C 语言

boost 时间与日期处理 导视: 类 特点 缺点 说明 timer 计时基类 不适合大跨度时间 适用大部分的普通计时 progress_timer 继承自timer 可以自动写入流中 只精确到0.01s 如果需要更精确,可派生个类,调用stream的precision设置 progress_display 图形化显示进度 只能输出到cout 如果还有其他输出则会干扰进度显示. 折中的办法是重新显示 pd.restart(size); pd+= pNum; date 日期结构,时间点 -- da

.h和.cpp文件的区别(zt)详细介绍_C 语言

因刚接触VC++的开发,需要对C++一些原理性的东西进行掌握.特别是对源文件和头文件的概念,需要深入对它了解: 关于头文件和源文件的分别 首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话, 就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上 就可以分别放在一个单元,也就是cpp里面) 那么就是一个