【问题标题】:How to remove a node of a YAML document with yaml-cpp如何使用 yaml-cpp 删除 YAML 文档的节点
【发布时间】:2014-01-09 19:24:15
【问题描述】:

我有一个 YAML 文件,例如:

top:
  names:
    - name: john1
    - name: john2
    - name: john3
    - name: john.doe

现在我必须删除 top/names/name(john.doe)。如何使用 yaml-cpp 实现这一目标?我的代码是:

void deleteNode(string id)
{
    YAML::Node config = YAML::LoadFile("doc.yaml");
    for (int i = 0; i < config["top"]["names"].size(); i++)
    {
        if(config["top"]["names"][i]["name"].as<string>() == id)
        {
            config["top"]["names"].remove(config["top"]["names"][i]);
            break;
        }
    }
}
deleteNode("john.doe");

这似乎没有任何作用。

【问题讨论】:

    标签: yaml yaml-cpp


    【解决方案1】:

    由于您正在处理一个序列,因此您必须按其索引删除一个节点:

    void deleteNode(string id) {
        YAML::Node config = YAML::LoadFile("doc.yaml");
        YAML::Node names = config["top"]["names"];
        for (int i = 0; i < names.size(); i++) {
            if(names[i]["name"].as<string>() == id) {
                names.remove(i);
                break;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      从序列中删除节点在 libyaml-cpp 版本 0.6.3 中已修复。如果您的版本比该版本旧,您应该更新到该版本或更高版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多