2011-02-23 59 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 2011-02-23 22:38:13