Search code examples
yamlyaml-cpp

How to remove a node of a YAML document with yaml-cpp


I have a YAML file like:

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

Now I have to remove top/names/name(john.doe). How can I achieve that with yaml-cpp? My code is:

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");

This doesn't seem to do anything.


Solution

  • Since you're dealing with a sequence, you have to remove a node by its index:

    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;
            }
        }
    }