2016-04-29 93 views
1

當我SnakeYAML加載以下文件:SnakeYAML:是否有可能獲得對象的錨定名稱?

unit: 
    &kg 
    name: Kilogram 

它返回一個地圖,內容如下:

{unit={name=Kilogram}} 

與錨的引用在SnakeYAML的偉大工程,但它也有可能得到從文檔中定位名稱?

代碼片段:最初基於PyYAML

String text = "unit:\n &kg\n name: Kilogram\n"; 
System.out.println(new Yaml().load(text)); // -> {unit={name=Kilogram}} 

回答

1

SnakeYAML和基於該代碼通過保持從錨名到對象的映射它的解析過程中創建解決了錨。 如果解析器稍後遇到引用,它會在錨點中查找名稱,並知道創建指向爲錨點創建的對象的鏈接。

在PyYAML中,此映射位於Composer對象的代碼中,該屬性適當地稱爲anchors。 SnakeYaml這是still called the same

您需要做的是遍歷該映射並將該值與(對您的對象的引用)進行比較。如果它們匹配,屬於該值的鍵幾乎肯定是錨名稱。


在我的Python包ruamel.yaml,這是PyYAML對YAML 1.2更新我實現了其他事情的意見和錨其中保留了round_trip模式。在構建過程中,我將註釋和錨點信息掛在要創建的對象上,這很容易在Python中完成,但AFAIK在Java中並不那麼容易。

相關問題