Boost PropertyTree:检查孩子是否存在

时间:2011-09-27 11:49:11

标签: c++ boost boost-propertytree

我正在尝试编写XML解析器,将XML文件解析为boost::property_tree并遇到此问题。如何(快速)检查某个房产的孩子是否存在?

显然我可以使用BOOST_FOREACH迭代所有孩子 - 但是,这不是更好的解决方案吗?

4 个答案:

答案 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 ......有内存备用,您可以使用地图容器进行快速查找。

相关问题