【发布时间】:2014-04-22 10:31:46
【问题描述】:
假设我有以下树:
boost::property_tree::ptree tree;
tree.add("1.2.3", "value-1");
tree.add("1.2.3.4", "nested-value");
tree.add("1.2.3", "value-2");
tree.add("1.2.33", "other-value");
具有以下序列化的 INFO 形式:
1
{
2
{
3 value-1
{
4 nested-value
}
3 value-2
33 other-value
}
}
是否有一种方法可以删除具有提供(可能是嵌套)路径的所有节点? 即:
remove(tree, "1.2.3");
BOOST_ASSERT(!tree.get_optional<std::string>("1.2.3") &&
!tree.get_child_optional("1.2.3"));
带有结果信息表单:
1
{
2
{
33 other-value
}
}
查看 ptree 文档和源代码,我发现了几种删除树的直接子级的方法(不考虑嵌套子级)。此外,有几种方法可以通过它的完整路径获取子树(即使它是嵌套的)。但由于无法轻松获取节点的父节点,因此我无法将所有这些组合起来得到我需要的东西。
有没有什么简单的方法可以得到我需要的东西,可能不需要重新实现树遍历?
【问题讨论】:
-
看看 boost::adjacency_list 和 boost::default_dfs_visitor - 比 property_tree 复杂但更强大
-
谢谢,但我还需要序列化/反序列化树的能力。
标签: c++ boost boost-propertytree