我有一个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");
这似乎没有做任何事情。
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:0)
从序列中删除节点已在 libyaml-cpp 版本 0.6.3 中得到修复。如果您的版本低于该版本,则应更新到该版本或更高版本。