2011-02-23 20 views
3

私は以下のようなyamlファイルを作っています。yamlの解析方法は? (yaml-cpp)

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

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" 
    } 
} 
+0

は答えてくれてありがとうとリンクいただきありがとうございます。まだ問題がまだ開いているので、まだマージをサポートしていないようです。多分私は別の解決策を探す必要があります。ありがとう。 ;) – SeniorLee

関連する問題