假设我有以下树:
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");
具有以下序列化信息形式:
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 文档和源代码,我发现了几种删除树的直接子项的方法(不考虑嵌套的子项)。此外,有几种方法可以通过完整路径获取子树(即使它是嵌套的)。但是由于无法轻松获取节点的父节点,因此我无法将所有这些组合起来以获得所需的内容。
是否有任何简单的方法来获得我需要的东西,可能不需要重新实现树遍历?
最佳答案
我认为这是不可能的。这在 JSON 中很好,但是使用 INFO 子树键可以在每个级别重复,这使得遍历所有树很重要
也许这个答案有助于入门:How to iterate over XML structure in boost::property_tree
不过,在迭代正在修改的树时要非常小心。您需要仔细检查 erase
关于c++ - boost 属性树 : Remove a nested node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217009/