Boost PropertyTree:检查孩子是否存在

pau*_*l23 36 c++ boost boost-propertytree

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

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

Rob*_*obH 49

optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
  // child node is missing
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*son 20

以下是其他几种选择:

if( node.count("possibliy_missing") == 0 )
{
   ...
}

ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢第二个...更多stl风格 (2认同)
  • node.count 也不适用于嵌套键,例如“child.subchild”。到目前为止,我发现唯一有效的是node.get_child_Optional,如下面的答案/sf/answers/1777254461/ (2认同)

小智 6

包括以下内容:

#include <boost/optional/optional.hpp>
Run Code Online (Sandbox Code Playgroud)

删除const

boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
  // child node is missing
}
Run Code Online (Sandbox Code Playgroud)

  • 当您的答案有效时,您复制了已经接受并且已经使用了将近3年的其他答案(大部分没有披露!)。您能否至少解释一下为什么进行了更改?最好将其用作评论。 (5认同)
  • 因为你没有添加到解决方案中,所以我投票给你 - 也许如果你改变的不仅仅是删除 const,那么我会投票支持 (2认同)