Trước hết tôi sẽ nói rằng tôi nghĩ rằng tôi đã làm thế nào nó nên được thực hiện nhưng mã của tôi sẽ không biên dịch bất kỳ cách nào tôi cố gắng. Tôi dựa trên giả định của tôi trên this official example of empty ptree trick. Ở đó bạn có thể tìm thấy dòng tiếp theo:Boost 1.46.1, Property Tree: Làm thế nào để lặp qua ptree nhận sub ptrees?
const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
Điều này cho thấy rằng (hoặc có thể) có thể lấy subptree ra khỏi ptree.
Vì vậy, tôi cho rằng chúng ta có thể lặp qua ptree với một cái gì đó giống như BOOST_FOREACH
theo cách như vậy:
BOOST_FOREACH(const boost::property_tree::ptree &v,
config.get_child("servecies"))
{
}
Nhưng tôi nhận được lỗi sau:
Error 1 error C2440: 'initializing' : cannot convert from 'std::pair<_Ty1,_Ty2>' to 'const boost::property_tree::ptree &'
hoặc nếu tôi cố gắng
BOOST_FOREACH(boost::property_tree::ptree &v,
config.get_child("servecies", boost::property_tree::empty_ptree<boost::property_tree::ptree>()))
{
}
Tôi nhận được:
Error 1 error C2039: 'empty_ptree' : is not a member of 'boost::property_tree'
Vì vậy, tôi phải làm gì: làm thế nào để lặp lại thông qua Tăng Ptree và nhận phụ Ptrees?
Cập nhật: Tôi cũng đã cố gắng mã như vậy
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;
}
}
này biên dịch, không ném bất kỳ exeptions nhưng không cout bất kỳ Sub data
, nó chỉ skeeps qua chu kỳ này.
Cập nhật 2:
Hm ... một cái gì đó có lẽ đã đi sai trong xml của tôi - bây giờ tôi nhận được kết quả chính xác với mã đó.
vấn đề của tôi là tôi có một số loại mảng của các đối tượng. Vì vậy, tôi có ví dụ { "servecie": { "module": [ "tập tin", "Quản trị", "Nhân sự" ] } "servecie": { "module": [ " file ", " Quản trị ", " HR " ] } } và tôi cần phải nhận từng đối tượng dưới dạng ptep. Điều đó có thể xảy ra không? – Rella
@Kabumbus Có. Giá trị 'v.second' sẽ là ptrees cho các đối tượng của mảng. – antonakos