XMLパーサーを記述して、XMLファイルをboost::property_tree
に解析しようとしていますが、この問題が発生しました。特定のプロパティの子が存在するかどうかを(すばやく)確認するにはどうすればよいですか?
明らかに、BOOST_FOREACH
を使用してすべての子を反復処理できますが、これに対するより良い解決策はありませんか?
optional< const ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
他の選択肢がいくつかあります。
if( node.count("possibliy_missing") == 0 )
{
...
}
ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if( it == ptree.not_found() )
{
...
}
これを含める:
#include <boost/optional/optional.hpp>
const
を削除します。
boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
これらのソリューションはツリーの繰り返しを回避するように見えるかもしれませんが、カバーの下ではまだ正確にそれを行っていることに留意してください。したがって、パフォーマンスを懸念し、予備の場合は、すばやく検索するためにマップコンテナーを使用できます。