我有
const boost::property_tree::ptree& v
我希望得到<xmlattr>.Value
,如果它存在,否则得到值。
我试过这段代码:
if(v.find("<xmlattr>.Value") != v.not_found())
value = v.get<std::string>("<xmlattr>.Value");
else
value = v.get_value<std::string>();
但是,它没有按预期工作。即使值存在,find()
也会返回not_found()
。
此代码有效:
auto inValue = v.get_optional<std::string>("<xmlattr>.Value");
if(inValue.is_initialized())
value = inValue.get();
else
value = v.get_value<std::string>();
我想我理解find()
错了。它到底是做什么用的?我应该使用另一种功能吗?
答案 0 :(得分:1)
根据文档,find()(see here)查找具有给定键(不是路径)的子项,如果没有,则查找not_found()。
<xmlattr>.Value
是一条路径(适用于get
和get_optional
)。