c++ - boost 属性树 : Remove a nested node

标签 c++ boost boost-propertytree

假设我有以下树:

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/

相关文章:

c++ - #include <cmath> : "In FIle included from" error message?

c++ - Boost Geometry:计算 vector 差

c++ - 如何迭代 boost::property_tree 中的 XML 结构

c++ - 使用 Boost C++ 为嵌套标签解析 xml

c++ - boost 属性树 : how to store pointers in it?

c++ - 是否可以在 OpenGL 的编译时找到特定于实现的长度?

c# - 可以编译为 DLL 并可以在 Linux Web 服务器后端使用的现代语言?

c++ - fatal error LNK1104 : cannot open file 'libboost_system-vc90-mt-gd-1_43.lib'

C++ boost 库 local_time_period

c++ - 为团队的其他成员恢复对 Eclipse 项目库的更改