4

我制作了一个如下所示的 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;
}
4

1 回答 1

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"
  }
}
于 2011-02-23T18:04:27.770 回答