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 に答える