En primer lugar, diré que creo que tengo cómo hacerlo, pero mi código no se compilará de ninguna manera. Basé mi suposición en this official example of empty ptree trick. Allí se puede encontrar la siguiente línea:Boost 1.46.1, Árbol de propiedades: ¿Cómo iterar a través de subárboles de recepción de phare?
const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
Lo que demuestra que es (o debería ser) posible conseguir subptree desde ptree.
así que supuse que podría iterar a través de ptree con algo como BOOST_FOREACH
de tal manera:
BOOST_FOREACH(const boost::property_tree::ptree &v,
config.get_child("servecies"))
{
}
Pero consigo siguiente error:
Error 1 error C2440: 'initializing' : cannot convert from 'std::pair<_Ty1,_Ty2>' to 'const boost::property_tree::ptree &'
o si intento
BOOST_FOREACH(boost::property_tree::ptree &v,
config.get_child("servecies", boost::property_tree::empty_ptree<boost::property_tree::ptree>()))
{
}
obtengo:
Error 1 error C2039: 'empty_ptree' : is not a member of 'boost::property_tree'
Entonces, ¿qué debo hacer: cómo iterar a través de Boost Ptree y obtener sub Ptrees?
Actualización: También probé dicho código
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;
}
}
Esto compila, no lanza ningún Excepciones pero no cout cualquier Sub data
, sólo skeeps a través de este ciclo.
Actualización 2:
Hm ... probablemente algo salió mal en mi xml - ahora consigo resultados correctos con ese código.
mi problema es que tengo una especie de matriz de objetos. Así que tengo, por ejemplo, { "servecie": { "módulo": [ "archivo" , "Admin", "HR" ] } "servecie": { "módulo": [ " archivo ", " Admin ", " HR " ] } } y necesito obtener cada objeto como seprate pree. ¿Es eso posible? – Rella
@Kabumbus Sí. Los valores 'v.second' serán los ptrees para los objetos de la matriz. – antonakos