boost读取xml

原创 2015年11月20日 18:20:50

1. include

#include <boost/property_tree/ptree.hpp>  
#include <boost/property_tree/xml_parser.hpp>  
#include <boost/foreach.hpp> 
using namespace boost::property_tree; 

2. Source code

bool load()
{
	ptree pt;  
	try
	{
		read_xml("CPublishCommonCfg.xml",pt);     
		ptree child = pt.get_child("Publish");  
		BOOST_FOREACH(ptree::value_type &service, child)
		{  
			ServiceInfoPtr service_info(new ServiceInfo());
			service_info->service_name = service.first.data();
			std::map<std::string,std::string> map;
			if (!service.second.empty()) 
			{
				BOOST_FOREACH(ptree::value_type &model, service.second)
				{
					std::string type = model.first.data();
					transform(type.begin(),type.end(),type.begin(), ::tolower);
			
	<span style="white-space:pre">			</span>	if(type == "in")
					{
						service_info->in_queue = model.second.data();
					}
					else if(type == "model")
					{
						std::string name;
						std::string out;
						if(!model.second.empty())
						{
							BOOST_FOREACH(ptree::value_type &leaf, model.second)
							{
								std::string type = leaf.first.data();
								transform(type.begin(),type.end(),type.begin(), ::tolower);
								if(type == "name")
								{
									name = leaf.second.data();
								}
								else if(type == "out")
								{
									out = leaf.second.data();
								}
								else
								{
									LOGGER_ERROR("Leaf type config error: must be model");
								}
							}
							if(!name.empty()&&!out.empty())
							{
								service_info->out_queue_map[name] = out;
							}
						}	
					} 
				}
			}
			else
			{
				LOGGER_WARN("service node can't be a leaf");
			}
			service_conf_.push_back(service_info);
		}  
	}
	catch (std::exception const&  ex)
	{
		LOGGER_ERROR("Can't init settings: "<<ex.what());
	}
	return true;
}

3.xml

<Publish>
    <Service>
      <In>CQ.SDBUS.CSwap.PublishQueue.Quote</In>
      <Model1>
        <Name>A</Name>
        <Out>QUEUE1</Out>    
     </Model1>
      <Model2>
         <Name>B</Name>
        <Out>QUEUE2</Out>
      </Model2>
      <Model3>
        <Name>C</Name>
        <Out>QUEUE3</Out>
      </Model3>
   </Service>
<Publish>


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用boost读取XML文件

boost中提供了对配置文件读取的支持,它就是:property_tree。    basic_ptree 是property_tree的核心基础。其接口像std::list。可以执行很多基本的元素操...
  • fansongy
  • fansongy
  • 2013年06月04日 22:46
  • 13121

Boost读取XML配置文件

前两天因工作需要写了个xml配置脚本解析的功能类,虽说有N种方式可以实现,但考虑到 Boost库在此方面的易操作性(虽支持不够健全,如Unicode支持等)所以封装了一下,具体如下: //CPro...
  • gxp
  • gxp
  • 2011年08月22日 13:41
  • 794

boost读取xml文件

boost的property_tree可以用来读取xml文件。用到的类 boost::property_tree::ptree,这个是用来保存解析后的xml数据流的类,解析函数read_xml,这个函...

boost::xml_parser 读取xml

boost::xml_parser 处理xml ---------debug_settings.xml-------- r 12 "jack" "0001" ...
  • chl0000
  • chl0000
  • 2012年10月19日 00:46
  • 5369

boost解析xml文件

前面我们介绍了xml文件,今天我们试着用boost库来解析xml文件。我们将举两个例子来说明怎么使用。来自boost官方的例子先看xml文件的内容: debug.log ...

基于boost简单读写xml文件笔记

头文件: #ifndef BOOSTXMLUTIL_H #define BOOSTXMLUTIL_H #include #include #include #include #include ...

利用boost 来进行xml解析

对xml的解析可能大家都很熟悉,网上流传比较多的代码一般都是对xml结构比较简单进行的操作,如果对结构像下面这样该怎么解析呢:         "12"       "jack"    ...

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

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

Boost xml解析之菜鸟版

1.准备工作: 环境: visual studio 2010 /boost:boost_1_54_0 新建Application什么的不做赘述,但是注意 如果需要引用Boost库中的lib 需要在属性...

利用boost 来进行xml解析

对xml的解析可能大家都很熟悉,网上流传比较多的代码一般都是对xml结构比较简单进行的操作,如果对结构像下面这样该怎么解析呢:         "12"       "jack"    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost读取xml
举报原因:
原因补充:

(最多只允许输入30个字)