2

我有一个 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");

这似乎没有任何作用。

4

2 回答 2

2

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

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;
        }
    }
}
于 2014-01-10T01:03:44.967 回答
0

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

于 2021-02-02T09:47:55.200 回答