property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml、json、ini、info文件。要使用property_tree和xml解析组件的话需要包含"boost/property_tree/ptree.hpp"和"boost/property_tree/xml_parser.hpp"。我们一般使用property_tree中预定义好的typedef: ptree来处理数据。

1、XML

如以下为读取xml文件中内容的示例:

<?xml version="1.0" encoding="UTF-8"?>
<conf>
<gui>0</gui>
<theme>matrix</theme>
<urls>
<url>http:://www.url1.com</url>
<url>http:://www.url2.com</url>
<url>http:://www.url3.com</url>
<url></url>
</urls>
<clock_style>24.35</clock_style>
</conf>
#include <cstdio>
#include <string>
#include <iostream>
using std::string;
#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/xml_parser.hpp"
#include "boost/typeof/typeof.hpp"
#include "boost/optional.hpp"
using namespace boost::property_tree; int main()
{
ptree pt;
read_xml("conf.xml", pt); boost::optional<int> op = pt.get_optional<int>("conf.gui");//使用get_optional()获得节点,不存在则op为空
if (op)
{
int i = op.get();
} string str1 = pt.get<string>("conf.theme", "");//使用get()获得节点,不存在则返回"" boost::optional<ptree&> child_null_test = pt.get_child_optional("conf.urls");
if (child_null_test)
{
BOOST_AUTO(child, pt.get_child("conf.urls"));
for (BOOST_AUTO(pos, child.begin()); pos != child.end(); ++pos)
{
string str = pos->second.get_value<string>();
std::cout << str << std::endl;
}
} string str = pt.get("conf.clock_style", "");
}

以下为向xml文件添加内容:

    ptree pt;
read_xml("conf.xml", pt);
pt.add("conf.urls.url", "http://www.url4.com");
write_xml("conf.xml", pt);

以下为修改xml中内容:

ptree pt;
read_xml("conf.xml", pt);
pt.put("conf.gui", );
write_xml("conf.xml", pt);

以下为新建一个xml文件或打开一个xml并将里面的内容清除:

ptree pt;
pt.put("conf.gui", );
write_xml("conf.xml", pt);

节点的属性保存在节点的<xmlattr>中,节点的注释保存在节点的<xmlcomment>中,获取示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<conf><!--conf comment-->
<gui>1</gui>
<theme id="001">matrix</theme>
<urls><!--urls comment-->
</urls>
</conf>
ptree pt;
read_xml("conf.xml", pt);
boost::optional<string> op = pt.get_optional<string>("conf.<xmlcomment>");
if (op)
{
string strCommentConf = op.get();
}
op = pt.get_optional<string>("conf.urls.<xmlcomment>");
if (op)
{
string strCommentUrls = op.get();
}
op = pt.get_optional<string>("conf.theme.<xmlattr>.id");
if (op)
{
string strAttr = op.get();
}

 2、JSON

使用property_tree解析json与解析xml的接口方法基本相同,不同的地方是读取json文件使用read_json,写入json文件使用write_json,如下示例:

{
"conf":
{
"gui": 1,
"theme": "matrix",
"urls":
{
"url": "http://www.url1.com",
"url": "http://www.url2.com",
"url": "http://www.url3.com"
},
"clock_style": 24
}
}
#include <cstdio>
#include <string>
#include <iostream>
using std::string;
#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/json_parser.hpp"
#include "boost/typeof/typeof.hpp"
#include "boost/optional.hpp"
using namespace boost::property_tree; int main()
{
ptree pt;
read_json("conf.json", pt); boost::optional<int> op = pt.get_optional<int>("conf.gui");//不存在则op为空
if (op)
{
int i = op.get();
int a = ;
} string str1 = pt.get<string>("conf.theme", ""); boost::optional<ptree&> child_null_test = pt.get_child_optional("conf.urls");
if (child_null_test)
{
BOOST_AUTO(child, pt.get_child("conf.urls"));
for (BOOST_AUTO(pos, child.begin()); pos != child.end(); ++pos)
{
string str = pos->second.get_value<string>();
std::cout << str << std::endl;
}
} string str = pt.get("conf.clock_style", ""); return getchar();
}

boost-使用property_tree来解析xml、json的更多相关文章

  1. boost::property_tree读取解析.xml文件

    boost::property_tree读取解析.xml文件 1)read_xml 支持中文路径  boost::property_tree::wptree wpt;    std::locale:: ...

  2. iOS中解析 XML / JSON

    JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...

  3. boost.property_tree解析xml的帮助类以及中文解析问题的解决(转)

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  4. (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  5. boost::property_tree读取解析ini文件--推荐

    boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...

  6. boost解析XML方法教程

    boost库在解析XML时具有良好的性能,可操作性也很强下地址有个简单的说明 http://blog.csdn.net/luopeiyuan1990/article/details/9445691 一 ...

  7. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  8. iOS开发笔记3:XML/JSON数据解析

    这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...

  9. Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

    1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...

随机推荐

  1. Wannafly挑战赛13 C:zzf的好矩阵(思维)

    题目描述 一个8 * 8的棋盘,第一个格子放1个麦穗,第二个格子放2个麦穗,第三个格子放4个麦穗……那么最后,共要放几个麦穗呢? zzf表示这个问题实在太简单,于是重新规定了游戏的规则. 初始的棋盘为 ...

  2. swift - 听云监测(Testin - Bugout) - 集成

    听云的SDK集成放的太难找了,官方demo到现在也没找到.. 我找了半天没找到在哪,看下面俩链接吧, 切记:添加的三方库 以文档为主,视频里的三方库 不一定正确 iOS SDK 集成:https:// ...

  3. Quartz代码及配置详解(转)

    Quartz可以用来做什么? Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年4月1日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的爱情动作片 ...

  4. how2j网站前端项目——天猫前端(第一次)学习笔记7

    开始学习结算页面 结算页面分为3个部分学习:1.简单的头部和收货地址 2.较为复杂的确认订单信息 3.交互 一.简单的头部和收货地址 根据站长的图片,自己模仿着做了一下,刚开始没有想到填写信息的4个框 ...

  5. wheelView实现滚动选择 三方开源的封装控件 spannableString autofitTextView、PinnedSectionListView SwipeListView等等

    wheelView多用于popupwindow用来滚动选择条目 github上的开源三方控件     spannableString   autofitTextView.PinnedSectionLi ...

  6. es6问答

    1. 箭头函数的特点 *箭头函数this的指向是定义时所在的对象,而不是使用时所在的对象: * 箭头函数不能做构造函数 * 不能使用argument对象 *不能使用yield命令 2.let cons ...

  7. python 使用内置方法读取注册表

    #coding:utf-8 import _winreg key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"键值") #获取该键的 ...

  8. This system is not registered with an entitlement server. You can use subscription-manager to register.

    错误信息 [root@bogon apache-tomcat-]# yum install gcc-c++ Loaded plugins: product-id, search-disabled-re ...

  9. NuGet打包,IIS自动发布

    NuGet学习笔记(1)——初识NuGet及快速安装使用 https://kb.cnblogs.com/page/143190/ NuGet学习笔记(2)——使用图形化界面打包自己的类库 https: ...

  10. css布局之头尾固定中间高度自适应

    被这个问题困扰了很久.大神别鄙视我,我是搞后台开发的....试过了很多方法,比如设定高度100%.同事用的js计算高度,我对js设置的方式一直觉得不够好,尽管设置高度为100%的方式更差,直到发现了一 ...