我正在尝试编写XML解析器,将XML文件解析为boost::property_tree
并遇到此问题。如何(快速)检查某个房产的孩子是否存在?
显然我可以使用BOOST_FOREACH
迭代所有孩子 - 但是,这不是更好的解决方案吗?
答案 0 :(得分:45)
optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
答案 1 :(得分:19)
以下是其他几种选择:
if( node.count("possibliy_missing") == 0 )
{
...
}
ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
...
}
答案 2 :(得分:4)
包括这个:
#include <boost/optional/optional.hpp>
删除const
:
boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
答案 3 :(得分:1)
虽然这些解决方案似乎可以避免在树上进行迭代,但请记住,在封面下它们仍然正是这样做的,所以如果你担心性能,你可能会使你的算法成为n ^ 2 ......有内存备用,您可以使用地图容器进行快速查找。