我正在尝试使用 yaml-cpp 加载和更改 YAML 文件。
我有一个字符串,它确定 yaml 的路径,例如“node1/node2/node3”,它在“/”处拆分,然后遍历 YAML。
之后,我尝试保存 YAML。
我的问题是,不知何故,YAML 没有按照我希望的方式进行更改。我写了一个最小的例子:
#include <yaml-cpp/yaml.h>
#include <iostream>
int main()
{
const std::string test_yaml =
"node1:\n"
" node2:\n"
" node3:\n"
" name: \"somevalue\"";
YAML::Node root = YAML::Load(test_yaml);
std::list<std::string> path;
path.push_back("node1");
path.push_back("node2");
path.push_back("node3");
YAML::Node traverse = root;
for (const std::string &path_element: path)
{
traverse = traverse[path_element];
}
traverse["name"] = "something else";
YAML::Emitter e;
e << root;
std::cout << e.c_str() << std::endl;
return 0;
}
我期望 YAML 看起来像这样:
node1:
node2:
node3:
name: something else
但结果是:
node2:
name: something else
我不知道出了什么问题。
上面的代码可以使用
g++ -o yamlex yamlex.cc $(pkg-config --libs --cflags yaml-cpp)
进行编译
为了避免更改节点,请使用
reset
:
for (const std::string &path_element: path)
{
traverse.reset(traverse[path_element]);
}