yaml解析的方式? (yaml-cpp)
Posted
技术标签:
【中文标题】yaml解析的方式? (yaml-cpp)【英文标题】:The way of yaml parsing? (yaml-cpp) 【发布时间】:2011-02-23 11:17:09 【问题描述】:我已经制作了一个如下所示的 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;
【问题讨论】:
【参考方案1】: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"
【讨论】:
感谢您的回答并感谢您提供链接。我想它似乎仍然不支持合并,因为问题仍然存在。也许我必须寻找另一种解决方案。谢谢。 ;)以上是关于yaml解析的方式? (yaml-cpp)的主要内容,如果未能解决你的问题,请参考以下文章