首先我会说,我想我应该怎么做,但我的代码不会编译任何方式,我尝试。我基于我的假设
this official example of empty ptree trick.在那里你可以找到下一行:
const ptree &settings = pt.get_child("settings", empty_ptree());
这表明它是(或应该)可能从ptree获得subptree。
所以我假设我们可以用像BOOST_FOREACH这样的方式遍历ptree:
BOOST_FOREACH(const boost::property_tree::ptree &v,
config.get_child("servecies"))
{
}
但我得到下一个错误:
Error 1 error C2440: ‘initializing’ : cannot convert from ‘std::pair<_ty1>’ to ‘const boost::property_tree::ptree &’
或如果我尝试
BOOST_FOREACH(boost::property_tree::ptree &v,
config.get_child("servecies", boost::property_tree::empty_ptree<:property_tree::ptree>()))
{
}
我得到:
Error 1 error C2039: ’empty_ptree’ : is not a member of ‘boost::property_tree’
所以我该怎么做:如何迭代通过Boost Ptree和获得子Ptrees?
更新:
我也试过这样的代码
BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
config.get_child("path.to.array_of_objects"))
{
std::cout << "First data: " << v.first.data() << std::endl;
boost::property_tree::ptree subtree = (boost::property_tree::ptree) v.second ;
BOOST_FOREACH(boost::property_tree::ptree::value_type &vs,
subtree)
{
std::cout << "Sub data: " << vs.first.data() << std::endl;
}
}
这个编译,不抛出任何exeptions,但不cout任何子数据,它只是通过这个循环skeeps。
更新2:
Hm …一些可能在我的xml错误 – 现在我得到正确的结果与该代码。