Как удалить узел документа YAML с помощью yaml-cpp

У меня есть файл 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");

Похоже, это ничего не делает.


person Mike Manilone    schedule 09.01.2014    source источник


Ответы (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;
        }
    }
}
person Jesse Beder    schedule 10.01.2014

Удаление узла из последовательности исправлено в libyaml-cpp версии 0.6.3. Вам следует выполнить обновление до этой версии или выше, если ваша версия старше этой.

person Alireza Sadeghian    schedule 02.02.2021