boost.property_tree

//made by davidsu33
//boost.property_tree是一个保存了多个属性值的树形数据结构
//boost.property_tree可以解析xml ini json和info四种格式的文本

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

#include <boost/typeof/typeof.hpp>

#include <iostream>
#include <string>
#include <cassert>
using namespace std;

void putline(const char * str)
{
	cout<<str<<endl;
}

void putline(const std::string& str)
{
	cout<<str<<endl;
}

void parse_xml()
{
	std::string filename = "./conf.xml";

	typedef boost::property_tree::ptree PTree;
	PTree pt;
	boost::property_tree::read_xml(filename, pt);

	string theme = pt.get<string>("conf.theme");
	int guiID = pt.get<int>("conf.gui");

	//int id = pt.get_value<int>();
	assert(guiID == 1);

	//不存在属性返回默认值
	int def = pt.get<int>("conf.no", 100000);
	assert(def = 100000);

	BOOST_AUTO(childs2, pt.get_child("conf.urls"));
	PTree childs = pt.get_child("conf.urls");

	//???
	//int count = pt.count("urls");
	//assert(count == 3);

	//读取多子节点的数据
	BOOST_AUTO(it, childs.begin());
	BOOST_AUTO(iend, childs.end());
	for (;
		it != iend; ++it)
	{
		//迭代器指向ptree的value_type,
		//它的second成员是子节点自身
		//cout<<it->second.get_value<string>()<<endl;

		//等价于
		cout<<it->second.data()<<endl;
	}

	//读取XML的属性,不支持声明的读取
	//string decl = pt.get<string>(""); //读取XML声明

	BOOST_ASSERT(pt.get<string>("conf.gui.<xmlattr>.lib") == "QT");
	BOOST_ASSERT(pt.get<int>("conf.theme.<xmlattr>.id") == 1002);
	BOOST_ASSERT(pt.get<string>("conf.<xmlcomment>") == "this is conf comment");

	//貌似不支持CDATA,测试未通过
	//std::string xmltext = pt.get<string>("conf.<xmltext>");
	//BOOST_ASSERT(pt.get<string>("conf.<xmltext>") == "字符数据-character data");
}

int _tmain(int argc, _TCHAR* argv[])
{
	parse_xml();
	getchar();
	return 0;
}

时间: 2024-10-13 17:13:17

boost.property_tree的相关文章

Boost property_tree解析json

使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,info等格式的数据,用property_tree解析这几种格式使用方法很相似. 解析json很简单,命名空间为boost::property_tree,reson_json函数将文件流.字符串解析到ptree,write_json将ptree输出为字符串或文件流.其余的都是对ptree的操作. 解析

C++ 中使用boost::property_tree读取解析ini文件

boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 boost_1_53_0.tar.gz 使用系统  ubuntu 12.10 一.解压 [plain] view plaincopy tar -zxvf  boost_1_53_0.tar.gz 得到一个文件夹 boost_1_53_0,  拷贝其子目录 boost 到以下路径 [plain] vi

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

boost::property_tree读取解析ini文件 [cpp] view plaincopy #include "stdafx.h" #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> int main() { boost::property_tree::ptree pt; boos

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

1)read_xml 支持中文路径  boost::property_tree::wptree wpt;    std::locale::global(std::locale(""));    boost::property_tree::xml_parser::read_xml("E:\\测试\\test.xml",wpt); 2)get  ptree pt;    read_xml("D://test1.xml",pt); //读入一个xml文

使用boost::property_tree生成带attribute的xml

以前写过一篇"使用Boost property tree来解析带attribute的xml", 可是还有姐妹篇一直没贴.看看前一篇贴了都快都快3年了,时间过的真快. 这一小篇就算是下篇吧,即用boost::property_tree生成带attribute的xml. 直接看demo code: #include <iostream> #include <sstream> #include <boost/property_tree/xml_parser.hp

is boost::property_tree::ptree thread safe?

引入boost::property_tree::ptree解析json时,在多线程情况下经常crash. 最后在stackoverflow中找到答案. 在ptree下层使用的spirit库默认不是线程安全的. 需要加一个 #define BOOST_SPIRIT_THREADSAFE 此宏定义需要写在#include <boost/property_tree/ptree.hpp>之前. 在stackoverflow上相关的问题描述链接: http://stackoverflow.com/que

boost.property_tree读取中文乱码问题正确的解决方式

开发项目的时候在使用boost,在宽字符下遇到中文乱码问题 上网上看大家都是先转成utf8在进行解析的,例如: http://blog.csdn.net/hu_jiangan/article/details/49945373 中 void Init(const wstring& fileName, wptree& ptree) { std::wifstream f(fileName); std::locale utf8Locale(std::locale(), new std::codec

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

boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各种不好用,归纳一下不好用的地方有这些:获取不存在的节点时就抛出异常 获取属性值时,要排除属性和注释节点,如果没注意这一点就会抛出异常,让人摸不着头脑. 内存模型有点怪. 默认不支持中文的解析.解析中文会乱码. ptree获取子节点 获取子节点接口原型为get_child(node_path),这个n

boost的property_tree组件

1.1 缘起 stl中对线性表有充分的实现,无论是vector还是list都是典型的线性表,即便是set和map,尽管实现上采用了诸如红黑树之类的树形结构,但那仅仅是为了快速检索的需要,从语义上来说它们依旧是线性表,无法表达目录树这种树形结构.boost中的property_tree可以看做是对树形结构实现的补充,我们大可把它扩展应用到各种需要树形结构的地方. 当我们拥有了一个树性结构以后,那么也就同时拥有了树形结构中的每个节点的访问权,很自然的,我们希望每个节点都可以方便的检索(类似于输入一个