Boost PropertyTree:检查child是否存在
Boost PropertyTree: check if child exists
我试图编写一个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 this:
#include <boost/optional/optional.hpp>
移除const
:
boost::optional< ptree& > child = node.get_child_optional( "possibly_missing_node" );
if( !child )
{
// child node is missing
}
另一种可以使用的方法是在您不想检查一些可能丢失的子/节点时使用。尝试使用迭代器:
if (node.begin() != node.end()) { // Node does have child[ren]
// Code to process child nodes
}
您可以使用count()检查标签是否存在
typedef boost::property_tree pt;
pt::ptree tree;
pt::read_xml(filename, tree);
int bodyCount = tree.count( "body" );
if( bodyCount == 0 )
{
cout<<"Failed : body tag not found"<<endl;
return -1;
}
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?