web-dev-qa-db-ja.com

ブーストPropertyTree:子が存在するかどうかを確認します

XMLパーサーを記述して、XMLファイルをboost::property_treeに解析しようとしていますが、この問題が発生しました。特定のプロパティの子が存在するかどうかを(すばやく)確認するにはどうすればよいですか?

明らかに、BOOST_FOREACHを使用してすべての子を反復処理できますが、これに対するより良い解決策はありませんか?

34
paul23
optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
  // child node is missing
}
48
RobH

他の選択肢がいくつかあります。

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

ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
   ...
}
19

これを含める:

#include <boost/optional/optional.hpp>

constを削除します。

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

これらのソリューションはツリーの繰り返しを回避するように見えるかもしれませんが、カバーの下ではまだ正確にそれを行っていることに留意してください。したがって、パフォーマンスを懸念し、予備の場合は、すばやく検索するためにマップコンテナーを使用できます。

1
Rich