我已经制作了如下的yaml文件。
Define1: &Define1
0: zero
1: one
Define2:
<<: *Define1
2: two
在Online YAML parser中尝试过。结果如下。 (只需了解节点的构造方式。)
{
"Define1": {
"0": "zero",
"1": "one"
},
"Define2": {
"0": "zero",
"1": "one",
"2": "two"
}
}
当然我预计'yaml-cpp'会解析同样的方式,但它有点不同。
我猜是这样的。 (几乎可以肯定)
{
"Define1": {
"0": "zero",
"1": "one"
},
"Define2": {
"Define1": {
"0": "zero",
"1": "one"
},
"2": "two"
}
}
到底是怎么回事!然后我必须在循环时检查节点类型吗?
这是一个已知问题吗?或者'yaml-cpp'只是解析那个?
这段代码就是我做的。
// already parsed
const YAML::Node& node = &(docYAML)["Define2"];
for (YAML::Iterator it=node->begin(); it!=node->end(); ++it)
{
const YAML::Node& nodeList = it.second();
std::string str;
nodeList[0] >> str;
}
答案 0 :(得分:4)
yaml-cpp尚未实现“合并”键。如果您想在问题实施之前解决问题,请参阅http://code.google.com/p/yaml-cpp/issues/detail?id=41。
目前,yaml-cpp实际上是将您的YAML文件解析为:
{
"Define1": {
"0": "zero",
"1": "one"
},
"Define2": {
"<<": {
"0": "zero",
"1": "one"
},
"2": "two"
}
}