c++ - 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点?

标签 c++ xml boost boost-propertytree

我想从 boost 属性树中删除一个节点,但我想保留它的子节点并将它们连接到已删除节点的父节点(即它们的祖父节点)。有没有一种优雅的方法可以实现这一点?

最佳答案

这可能是移动孙子的最有效方式:

std::move(middle.begin(), middle.end(), back_inserter(parent));

完整样本

Live On Coliru

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>

using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;

int main() {

    std::istringstream iss(R"({ "a" : { "middle" : { "a1":1, "a2":2, "a3":3 }, "more":"stuff" } })");
    ptree pt;
    read_json(iss, pt);

    auto& parent = pt.get_child("a");
    auto& middle = pt.get_child("a.middle");

    std::move(middle.begin(), middle.end(), back_inserter(parent));
    parent.erase("middle");

    write_json(std::cout, pt);

}

示例 json 输出:

{
    "a": {
        "more": "stuff",
        "a1": "1",
        "a2": "2",
        "a3": "3"
    }
}

关于c++ - 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561852/

相关文章:

python - 将 XML 导入 SQL 数据库

python-3.x - python格式化问题解析子元素

c++ - 转发没有类声明的 shared_ptr

c++ - Boost::Asio 多播监听地址

c++ - 从一个进程到另一个进程的信号 C++

c++ - 静态方法/字段的继承 C++

c++ - 不明确的模板实例化

c++ - 多线程应用程序中的访问冲突,C++

c++ - Cppcheck Cmake集成: abort build on warning

java - 根据 Eclipse 中通过 JAXB 和 XSD 构建选项生成的 xsd 文件验证 xml