
Hey Boost users! I'm iterating over an XML document using boost property tree and storing the results in a struct. The issue I have is that I can only get to the first "item" nodes and can't access the second "item" nodes. I was hoping someone would point out where I've made a mistake. My program output looks like this (you can see items are missing.. there is no cookie2, candy2 or chocolate2 items shown): jar : snAcks snack : coOkie item : cooKie1 snack : canDy item : caNdy1 snack : cHocolate item : choColate1 Here's the xml file: <root> <jar name="snAcks"> <snack name="coOkie"> <item name="cooKie1"></item> <item name="cookIe2"></item> </snack> <snack name="canDy"> <item name="caNdy1"></item> <item name="candY2"></item> </snack> <snack name="cHocolate"> <item name="choColate1"></item> <item name="chocOlate2"></item> </snack> </jar> </root> Here's the source code: void parse_xml( boost::property_tree::iptree const& pt ) { BOOST_FOREACH( boost::property_tree::iptree::value_type const& v, pt.get_child("root.jar") ) { // Show jar if ( boost::iequals( v.first, "<xmlattr>" ) ) { std::cout << "jar : " << v.second.getstd::string("NaME") << std::endl; } if ( boost::iequals( v.first, "snack" ) ) { // Show snack std::cout << "snack : " << v.second.getstd::string("<xmlattr>.name") << std::endl; try { BOOST_FOREACH( boost::property_tree::iptree::value_type const& val, v.second.get_child("item") ) { if ( boost::iequals( val.first, "<xmlattr>" ) ) { // Show item std::cout << "item : " << val.second.getstd::string("nAmE") << std::endl; } } } catch (boost::property_tree::ptree_bad_path& e) { // Show what caused exception std::cout << "Exception: " << e.what() << std::endl; } } } } Thank you for taking time to read this. I think I've made a simple mistake, but cannot understand where.