2016-04-29 142 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中并不那么容易。

相关问题